如何使用XDocument.XPathEvaluate处理空命名空间?

时间:2010-06-16 19:04:34

标签: .net xpath linq-to-xml xml-namespaces

我正在尝试使用XDocument和XPathEvaluate从woot.com Feed中获取值。我正在处理其他名称空间,但这个例子给了我一些问题。

     <rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0">
      <channel>    
        <category text="Comedy" xmlns="http://www.itunes.com/dtds/podcast-1.0.dtd">
</category> 
<!-- this is a problem node, notice 'xmlns=' --!>

所以我试试这个:

  XmlNamespaceManager man = new XmlNamespaceManager(nt);
    man.AddNamespace("ns", "http://www.w3.org/2000/xmlns/");
// i've also tried man.AddNamespace("ns", string.Empty);
    xDocument.Namespace = man;
    var val = xDocument.XPathEvaluate("/rss/channel/ns:category/@text", xDocument.Namespace);

val始终为null。我正在使用ns:来自VS 2010 XPath Navigator插件的建议。关于如何处理这个的任何想法?

2 个答案:

答案 0 :(得分:5)

元素category位于命名空间http://www.itunes.com/dtds/podcast-1.0.dtd中。它不是一个空命名空间。它只是在输入XML中没有给出前缀。

man.AddNamespace("ns", "http://www.itunes.com/dtds/podcast-1.0.dtd");
...
xDocument.XPathEvaluate("/rss/channel/ns:category/@text", xDocument.Namespace);

答案 1 :(得分:2)

man.AddNamespace("ns", "http://www.w3.org/2000/xmlns/");

以下是错误:您绑定到错误的命名空间。

必须:

man.AddNamespace("ns", "http://www.itunes.com/dtds/podcast-1.0.dtd");