0

我在 C# 程序上使用 Xml 时遇到问题。

xml http://pastebin.com/Ufxaght6(来自沙箱)

我正在尝试获取有关 XML 的任何信息,我在节点上使用递归循环成功,但我想使用更有效的东西。

我正在尝试这个:

XmlDocument document = new XmlDocument();
        document.LoadXml(response);

        XmlNode node = document.SelectSingleNode("/getnewsalesresult/request/user");
        if (node != null)
            Logger.WriteLine(node.InnerText);
        else
            Logger.WriteLine("fail");

这总是给出一个空值。我认为问题来自“getnewsalesresult”(可能是通配符?)。

从 XML :

  <getnewsalesresult xmlns="http://www.sandbox.priceminister.com/res/schema/getnewsales" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.sandbox.priceminister.com/res/schema/getnewsales http://www.sandbox.priceminister.com/res/schema/getnewsales/getnewsales.2014-02-11.xsd " >

任何想法 ?

提前致谢。

4

1 回答 1

0

您的 XML 具有默认命名空间 ( xmlns="...")。默认命名空间具有不同的性质。声明了默认命名空间的元素及其所有后代,没有前缀,也没有在同一默认命名空间中考虑不同的命名空间声明。

在命名空间中获取元素的最简单方法就是忽略命名空间(正如对此问题的评论中所建议的那样):

string xpath = "/*[local-name()='getnewsalesresult']/*[local-name()='request']/*[local-name()='user']";
XmlNode node = document.SelectSingleNode(xpath);

更合适的方法是注册一个映射到默认命名空间 URI 的前缀,然后在 XPath 中使用该前缀:

XmlNamespaceManager ns = new XmlNamespaceManager(new NameTable());
ns.AddNamespace("d", "http://www.sandbox.priceminister.com/res/schema/getnewsales");
XmlNode node = 
        document.SelectSingleNode("/d:getnewsalesresult/d:request/d:user", ns);

不要错过将XmlNamespaceManager对象作为SelectSingleNode().

于 2014-08-29T00:51:29.963 回答