2010-10-03 19 views
5

Je voudrais savoir comment pourrais-je tester la situation de mise en jachère:Comment tester si un élément XML contient un élément de texte?

<foo> 
    <bla1>xxx</bla1> 
    <bla2>yyy</bla2> 
    <bla3>zzz</bla3> 
</foo> 

Dans le temps (reader.Read()), je laisse tomber dans le XmlNodeType.Element quand je suis dans le foo et BLA1-, bla2, bla3 ... Lorsque vous déposez le .TextElement dans le xxx, yyy, zzz. Mais puis-je tester si le bla aura une valeur de texte à l'intérieur ou non?

Merci beaucoup

Pedro Dusso

Répondre

2

Non, vous ne pouvez pas aussi longtemps que vous utilisez un XmlReader.

La classe XmlReader implémente un curseur vers l'avant uniquement via une hiérarchie XML. En tant que tel, vous ne pouvez opérer que sur le nœud XML trouvé à la position actuelle.

Dans votre cas, cela signifie que vous ne pourrez pas vérifier le contenu des nœuds "bla" sans les avoir préalablement parcourus.

+0

Vous avez raison, mais j'utilise le XmlTextReader en fait, désolé je ne l'ai pas écrit avant. –

+0

Le même principe est vrai pour XmlTextReader. Un curseur vers l'avant seulement vous permettra d'inspecter le nœud en cours de visite. Si vous souhaitez interroger une hiérarchie XML, vous devrez la charger dans une structure DOM en mémoire, telle que la classe XmlDocument ou la classe XDocument. –

+0

Yeap ... Je l'ai eu. Je vais devoir y penser. Nous sommes supposés traiter un fichier XML de 700 Mo, donc je ne serai pas capable de le charger en mémoire ... Merci quand même mec! –

0

Si vous utilisez un XmlTextReader vous pouvez utiliser la propriété IsEmptyElement

+0

Cela ne fonctionne pas en fait ... le IsEmptyElement fonctionne seulement pour , quand il est devenu vrai. Merci quand même ... –

0

Quelque chose ne va pas avec reader.HasValue? (ou string.IsNullOrEmpty (lecteur.Valeur))?