0

我正在尝试从 XML 返回某些行。

<geoip>
    <source>smart-ip.net</source>
    <host>68.9.63.33</host>
    <lang>en</lang>
    <countryName>United States</countryName>
    <countryCode>US</countryCode>
    <city>West Greenwich</city>
    <region>Rhode Island</region>
    <latitude>41.6298</latitude>
    <longitude>-71.6677</longitude>
    <timezone>America/New_York</timezone>
</geoip>

我之前得到了完整的转储,但现在我正在使用这段代码......

当我单击提交时,这是给我null的。name不知道为什么它不读取 XML 调用。

这是我的代码...

try {
    WebClient wc = new WebClient();

    var xml = wc.DownloadString(string.Format("http://smart-ip.net/geoip-xml/",
                                txtIP.Text));

    XmlDocument doc = new XmlDocument();
    doc.LoadXml(xml);

    var name = doc.DocumentElement.SelectSingleNode("//geoip/countryName").Value;
    txtIPresults.Text = name;
} catch (Exception myException) {
    throw new Exception("Error Occurred:", myException);
}
4

2 回答 2

2

您正在搜索的 XMLSelectSingleNode不包含与您的参数匹配的路径。该函数的默认返回为 null - 因此,当找不到您的路径时,将null返回。

此外,当我尝试访问您指定的网页时,我收到了服务器错误。我建议您至少检查一下以确保您的xml变量有内容。

(编辑)

查看 XML 后,我注意到您正在调用Value返回的单个节点。你不想要价值,你想要InnerText财产——在那里你会找到你正在寻找的价值。

于 2012-12-18T21:01:08.783 回答
1

除了InnerText按照 Jon 的正确建议使用之外,请尝试:

var name = doc.DocumentElement.SelectSingleNode("countryName").InnerText;

我认为你的问题是它doc.DocumentElement已经是geoipXML 元素,所以你只需要获取它的countryName子元素。

或者:

var name = doc.SelectSingleNode("//geoip/countryName").InnerText;
于 2012-12-18T21:16:23.123 回答