Как я могу обработать пустое пространство имен с XDocument.XPathEvaluate? - PullRequest
2 голосов
/ 16 июня 2010

Я пытаюсь использовать XDocument и XPathEvaluate для получения значений из ленты woot.com.Я хорошо работаю с другими пространствами имен, но этот пример доставляет мне проблемы.

     <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 всегда равен нулю.Я использую ns: по предложению из плагина VS 2010 XPath Navigator.Есть мысли о том, как с этим справиться?

Ответы [ 2 ]

5 голосов
/ 17 июня 2010

Элемент 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);
2 голосов
/ 17 июня 2010
man.AddNamespace("ns", "http://www.w3.org/2000/xmlns/");

Вот ошибка: вы привязываетесь к неправильному пространству имен.

Должно быть:

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