没有节点选自原子XML文件使用XPath?
-
20-08-2019 - |
题
我想要分析一个原子饲料的编程方式。我有原子XML下载作为一串。我可以载XML成 XmlDocument
.然而,我不能穿越文件使用XPath。每当我试着,我得到 null
.
我一直使用这个原子的饲料作为一个试验: http://steve-yegge.blogspot.com/feeds/posts/default
叫 SelectSingleNode()
总是返回 null
, ,除了当我使用"/
".这里是我想现在:
using (WebClient wc = new WebClient())
{
string xml = wc.DownloadString("http://steve-yegge.blogspot.com/feeds/posts/default");
XmlNamespaceManager nsMngr = new XmlNamespaceManager(new NameTable());
nsMngr.AddNamespace(string.Empty, "http://www.w3.org/2005/Atom");
nsMngr.AddNamespace("app", "http://purl.org/atom/app#");
XmlDocument atom = new XmlDocument();
atom.LoadXml(xml);
XmlNode node = atom.SelectSingleNode("//entry/link/app:edited", nsMngr);
}
我想可能是因为我XPath,因此我也试过了一个简单的查询,根节点,因为我知道根本应该工作:
// I've tried both with & without the nsMngr declared above
XmlNode node = atom.SelectSingleNode("/feed");
无论我做什么,现在看来似乎不能选择任何东西。很明显我错过什么,我只是不能找出什么.它是什么,我需要做,以便使XPath工作在这个原子喂?
编辑
虽然这个问题有一个答案,我发现了这个问题有一个几乎完全重复: SelectNodes不工作上的计算器料
解决方案
虽然C#实现可以允许默认名称空间(我不知道),中的XPath 1.0规范没有。所以,给“原子”自己的前缀:
nsMngr.AddNamespace("atom", "http://www.w3.org/2005/Atom");
和适当地改变您的XPath:
XmlNode node = atom.SelectSingleNode("//atom:entry/atom:link/app:edited", nsMngr);
其他提示
从字符串和查找任何“错误/错误”节点装载XML。
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlResult);
XmlNamespaceManager nm = new XmlNamespaceManager(xmlDoc.NameTable);
nm.AddNamespace("ns", "http://somedomain.com/namespace1/2"); //ns - any name, make sure it is same in the below line
XmlNodeList errors = xmlDoc.SelectNodes("/ns:*//ns:Errors/ns:Error", nm);
-Mathulan
不隶属于 StackOverflow