2010-10-13 3 views
2

c'est mon premier post ici - En général, je vais trouver la réponse quelque part dans ce conseil - mais pas aujourd'hui :-(XDocument.Descendants (ITEMNAME) - Problèmes pour trouver le nom qualifié

ok: Je, essaie de lire un XML-RSS-Feed à partir d'un site donc j'utiliser un async télécharger et créer un XDocument avec le XDocument.Parse() Méthode

le document a pour but d'être très simple, comme ceci:..

<root> 
    <someAttribute></SomeAttribute> 
    <item>...</item> 
    <item>...</item> 
</root> 

Maintenant, je veux lire tous les articles. :

foreach (XElement NewsEntry in xDocument.Descendants("item")) 

mais cela ne fonctionne pas. Donc, je l'ai trouvé un poste dans ce conseil d'utiliser le nom qualifié, car il y a des espaces de noms définis dans l'élément racine:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns="http://purl.org/rss/1.0/"> 
bien

, j'ai essayé tous les 3 espaces de noms disponibles - rien ne fonctionnait pour moi:

XName itemName = XName.Get("item", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); 
XName itemName2 = XName.Get("item", "http://purl.org/dc/elements/1.1/"); 
XName itemName3 = XName.Get("item", "http://purl.org/rss/1.0/modules/syndication/"); 

Toute aide serait vraiment cool. (Habituellement, je fais l'analyse XML avec Regex - mais cette fois, je développe pour un appareil mobile, et devrait donc prendre soin de la performance.)

Répondre

3

Vous n'avez pas essayé le default namespace10 à la fin de la déclaration rdf:

xmlns="http://purl.org/rss/1.0/" 

Cela est logique, comme tout élément dans l'espace de noms par défaut ne sera pas besoin d'avoir l'espace de noms préfixé au nom de l'élément.

+0

Ouais, voilà - une solution que je ne m'y attendais pas. Merci beaucoup. – dognose

+0

@dognose - Pas de problème. Apprécierait un upvote et vous accepter la réponse;) – Oded

0

Essayez cette

var elements = from p in xDocument.Root.Elements() 
where p.Name.LocalName == "item" 
select p; 

foreach(var element in elements) 
{ 
//Do stuff 
} 
Questions connexes