C#正在分析Xml SelectingNode
本文关键字:Xml SelectingNode | 更新日期: 2023-09-27 18:19:56
我在C#程序中使用Xml时遇到问题。
xmlhttp://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");
这总是给出一个null。我认为问题来自"getnewsalesrequal"(可能是通配符?)。
来自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/getnewsaleshttp://www.sandbox.priceminister.com/res/schema/getnewsales/getnewsales.2014-02-11.xsd">
知道吗?
提前谢谢。
您的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()
的第二个参数。