2010-06-16 16 views
2

J'essaie d'utiliser XDocument et XPathEvaluate pour obtenir des valeurs du flux woot.com. Je gère bien d'autres espaces de noms, mais cet exemple me pose des problèmes.Comment puis-je gérer un espace de noms vide avec XDocument.XPathEvaluate?

 <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=' --!> 

J'essayez ceci:

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 est toujours nulle. J'utilise ns: à partir de la suggestion du plugin VS 2010 XPath Navigator. Des idées sur la façon de gérer cela?

+0

Qu'est-ce 'xdwn.Namespace'? xdwn n'est pas défini dans le code fourni. –

+0

@Dimitre Novatchev - il aurait dû être xDocument, j'ai édité la question. Merci d'avoir vérifié ma question. – Aligned

Répondre

5

L'élément category se trouve dans l'espace de noms http://www.itunes.com/dtds/podcast-1.0.dtd. Ce n'est pas un espace de noms vide. Il n'y a tout simplement pas de préfixe dans le XML d'entrée.

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

Voici l'erreur: vous liez à l'espace de nommage incorrect.

doit être:

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