2010-12-13 13 views
2

Ich habe ein XML-Dokument, in dem einige der Elemente wie folgt aussehen:XmlReader Inner Problem

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

Mein Ziel ist „ABC“ aus dem obigen Beispiel zu erhalten. Ich habe versucht, die InnerText (die "WXYZABC" zurückgibt) und InnerXml und Value (die Null zurückgibt) -Eigenschaften in der XmlElement-Klasse und der Reihe von Eigenschaften in der XmlReader-Klasse zu. Irgendwie sehe ich keinen eleganten Weg, um die Daten zu extrahieren, die ich brauche.

Kann mir bitte jemand helfen?

Vielen Dank im Voraus.

+1

Hat das rootNode-Element kein zusätzliches XmlElement vom Typ XmlTextNode mit dem Wert ABC? –

Antwort

1

Aufgrund des sehr guten Vorschlag von @djechelon, scheine ich eine Lösung für diesen gefunden zu haben: auch einen XmlNode als Teil der Childnodes Sammlung

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()); 

die einfache Tatsache, verwendet die oben, dass der innere Text ist des XmlElement.

Vielen Dank für die tollen Antworten!

0

Versuchen XmlElement.Value

Edit: Das ist der falsche Ansatz, da dies immer NULL auf einem Elementknoten zurück.

+1

@Keith, 'XmlElement.Value' gibt immer' null' zurück. Der Frager sagt auch, dass er das schon probiert hat :) –

+0

XmlElement.Value gibt nur Werte ungleich Null zurück, wenn das Element ein Blattknoten AFAIK ist. – Chetan

+0

@Chetan, nein, immer 'null'. Siehe http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.value.aspx. –

3

Haben Sie gehen mit dieser:

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(); 

Was sie tut, ist, alle bekannten Elemente entfernen und das lässt Sie mit dem Text, die Sie suchen.