2010-03-08 6 views
1

Mon xml ressemble à ceci:obtenir tous les éléments qui ont un nom d'élément particulier

<nodes><skus><sku>abc</sku><sku>def123</sku></skus></nodes> 

Je veux obtenir tous les éléments avec le nom « sku »

J'ai un XDocument déjà chargé avec le xml.

List<XElement> elements = doc.Elements.Where(???) 

ou je ferais simplement:

doc.Elements("sku") 

?

Je ne veux pas que cela renvoie une erreur s'il n'y a aucun élément.

Répondre

1
static void Main(string[] args) 
{ 
    var g = XDocument.Parse("<nodes><skus><sku>abc</sku><sku>def123</sku></skus></nodes>"); 
    var t = from e in g.Descendants("sku") 
    select e; 
} 

EDIT: J'ai commencé cet exemple, mais je me suis interrompu - je suis déterminé à obtenir ce code sur même si ça me tue !!

+0

cela retournera une nodelist alors? – Blankman

+0

* from e in g.Descendants ("sku") select e *: c'est la même chose que * g.Descendants ("sku") *, il ajoute juste un niveau d'itérateur de plus ... –

+0

@Blankman: 'g. Descendants ("sku") 'renvoie' IEnumerable '. – AxelEckenberger

0

Vous voulez un nodelist des éléments de ce nom de tag:

XmlNodeList nodes = doc.GetElementsByTagName("sku"); 
+0

L'OP utilise Linq pour XML, pas XML DOM;) –

+0

ah. Je n'ai pas remarqué. Pensé que xdocument était une faute de frappe de xmldocument. –

3

Elements() retourne seulement les descendants directs d'un noeud.

doc.Descendants("sku"); 

devrait faire l'affaire. Il recherche le long de l'axe des descendants.

+0

ne devrait-il pas être skus et pas sku? – Blankman

+0

Dans votre OP vous vouliez tout sku dans le document ('doc.Elements (" sku ") ') c'est ce que j'ai fait. Si vous voulez le skus vous pouvez faire 'doc.Descendants (" skus ")' cela dépend de ce que vous voulez. – AxelEckenberger

Questions connexes