2010-12-13 21 views
2

J'ai un document Xml dans lequel certains des éléments se présentent comme suit:XmlReader InnerText Problème

<rootNode attib1="qwerty" > 
<subNode1>W</subNode1> 
<subNode2>X</subNode2> 
<subNode3>Y</subNode3> 
<subNode4>Z</subNode4> 
ABC 
</rootNode> 

Mon objectif est d'obtenir « ABC » de l'exemple ci-dessus. J'ai essayé d'examiner InnerText (qui retourne "WXYZABC") et InnerXml et Value (qui renvoie null) propriétés dans la classe XmlElement et groupe de propriétés dans la classe XmlReader aussi. D'une manière ou d'une autre, je ne vois pas un moyen élégant d'extraire les données dont j'ai besoin.

Quelqu'un peut-il m'aider s'il vous plaît?

Merci d'avance.

+1

L'élément rootNode ne possède-t-il pas XmlElement de type XmlTextNode avec la valeur ABC? –

Répondre

1

Sur la base de l'excellente suggestion de @djechelon, il me semble avoir trouvé une solution à ceci:

XmlDocument xdoc = new XmlDocument(); 
     xdoc.Load(@"D:\Test.xml"); 
     XmlElement xmlElement = xdoc.DocumentElement; 
     foreach (XmlNode node in xmlElement.ChildNodes) 
      if (node.NodeType == XmlNodeType.Text 
       && !string.IsNullOrWhiteSpace(node.Value)) 
       Console.WriteLine(node.Value.Trim()); 

L'utilise au-dessus du simple fait que le texte intérieur est également un XmlNode dans le cadre de la collection ChildNodes de l'élément XmlElement.

Merci à tous pour les bonnes réponses!

0

Essayez XmlElement.Value

Edit: Ceci est la mauvaise approche, car cela renvoie toujours NULL sur un nœud d'élément.

+1

@Keith, 'XmlElement.Value' retourne toujours' null'. En outre, le questionneur dit qu'il a déjà essayé cela :) –

+0

XmlElement.Value renvoie des valeurs non nulles seulement quand l'élément est un noeud feuille AFAIK. – Chetan

+0

@Chetan, non, toujours 'null'. Voir http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.value.aspx. –

3

un aller avec celui-ci:

string xml = @"<rootNode attib1=""qwerty"" > 
    <subNode1>W</subNode1> 
    <subNode2>X</subNode2> 
    <subNode3>Y</subNode3> 
    <subNode4>Z</subNode4> 
    ABC 
</rootNode>"; 

var xElement = XElement.Parse(xml); 
xElement.Elements().Remove(); 
xElement.Value.Dump(); 

Ce qu'il fait est de supprimer tous les éléments connus et qui vous laisse avec le texte que vous recherchez.