2011-09-26 6 views
1

J'ai un xml (appelé xdoc) fichier comme ce qui suit:XDocument référence null sur l'objet qui nest pas null

<Root> 
<ItemContainer> 
<Item> 
<Item> 
<Item> 
<Item> 
</ItemContainer> 
</Root> 

si je fais ce qui suit

XElement xel = xdoc.Element("ItemContainer"); 

Pour autant que je comprends, je devrait revenir à une référence à mon élément node ItemContainer, mais je continue à revenir null. J'ai lu les msdn docs pour cette

« Obtient le premier (dans l'ordre du document) élément enfant spécifié XName. »

aussi loin que je peux voir, ItemContainer est le premier élément enfant avec le nom spécifié. Qu'est-ce que je rate?

+0

Est-ce que 'xdoc' n'est peut-être pas' null'? Assurez-vous que 'xdoc' a été chargé ... Comment peupler' xdoc'? – Willem

+0

'XDocument xdoc = XDocument.Load (@" c: \ projets \ gen \ test_xml.xml ");' Ive mettre un point d'arrêt sur xdoc et tout a été chargé comme prévu – richzilla

Répondre

4

faire:

XElement xel = xdoc.Root.Element("ItemContainer"); 

Parce que, le <Root> doit également être traitée.

XElement xel = xdoc.Element("Root").Element("ItemContainer"); 

devrait également travailler

1

Je suppose que xdoc est de type XDocument. Le seul élément enfant du document est le nœud racine <Root>.
À cause de cela, votre code devrait ressembler à ceci:

XElement xel = xdoc.Root.Element("ItemContainer"); 
1

Avez-vous essayé ...

xdoc.Root.Element("ItemContainer"); 

L'élément racine est le premier élément

1

Comme d'autres ont expliqué, la seule enfant d'un XDocument est l'élément racine, donc pour obtenir un enfant de la racine, vous devez passer par la racine:

XElement xel = xdoc.Root.Element("ItemContainer"); 

Alternativement, vous pouvez utiliser XElement.Load(), si vous n'avez pas besoin d'accéder à des choses comme la déclaration XML. Il renvoie directement l'élément racine:

XElement root = XElement.Load(@"c:\projects\gen\test_xml.xml"); 
XElement xel = root.Element("ItemContainer");