【问题标题】:Keep getting null in XML call在 XML 调用中保持为空
【发布时间】:2012-12-18 20:58:21
【问题描述】:

我正在尝试从 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>

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

当我点击提交时,这给了我nullname。不知道为什么它没有读取 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);
}

【问题讨论】:

    标签: c# xml web-services http httpwebrequest


    【解决方案1】:

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

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

    (编辑)

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

    【讨论】:

    • 我是 Web 服务的新手,因此在尝试使其正常工作时遇到了麻烦。 xml 调用的正确路径是什么?
    • 没有看到网站返回的 XML,我无能为力。 XPath 查询要求您非常熟悉您正在旅行的确切路径。
    • 目前我的代理服务器可能正在过滤我的 Web 请求 - 当我尝试访问该站点时出现内部服务器错误。如果可能,您可以在问题中发布 XML 吗?
    【解决方案2】:

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

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

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

    或者:

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

    【讨论】:

    • 嗯,我试过了,但是当我点击提交时我仍然没有得到任何东西。它说 null 仍在调试中
    猜你喜欢
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2014-08-29
    • 2016-06-30
    • 2012-07-24
    相关资源
    最近更新 更多