我想要分析一个原子饲料的编程方式。我有原子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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top