2017-05-15 4 views
1

Ich versuche, eine XML-Datei zu analysieren, um den Inhalt jedes Knotens zu erhalten (wenn es nicht leer ist). Jedoch habe ich ein Problem habe ich zweimal den gleichen Wert:Wie bekomme ich nur den Inhalt eines XmlNode in C#

Damit Sie hier Teil meiner XML verstehen:

<para> 
    <emphasis role="bold">foobar</emphasis> 
</para> 

Als ich die Innertext von <para> bekommen es gibt mir „foobar“ und wenn Ich bekomme den Inhalt von <emphasis> es gibt mir auch Foobar. Auf diese Weise

I C#

bin mit
//[foreach loop ...] 
    if (node.Name == "para" || node.Name == "emphasis") 
    { 
     if (!String.IsNullOrWhiteSpace(subNode.InnerText)) 
     { 
      Debug.WriteLine(node.Name+ " - " + node.InnerText); 
     } 

    } 

Wie nur den Inhalt des Knotens aufgefordert zu bekommen und nicht den ganzen Text in seinem untergeordneten Knoten befindet.

Dank

+0

Das sieht aus wie ein Duplikat von [Beziehen InnerText nur des aktuellen Knotens mit XmlNode] (http://stackoverflow.com/q/11461376/3744182) aber die akzeptierte Antwort dort ist unvollständig; Vielleicht sollte ich eine vollständige Version hinzufügen? – dbc

+0

OK, ich habe eine [vollständigere Antwort] (https://Stackoverflow.com/a/43989651/3744182) zu dieser Frage hinzugefügt. Lassen Sie es mich wissen, wenn Sie denken, dass dies ein Duplikat ist. – dbc

Antwort

1

Die Inner Eigenschaft eines Knotens mit untergeordneten Knoten ist immer jeder verketteten Inner Eigenschaften des untergeordneten Knoten und sich selbst. Das ist nicht was du willst.

<para> 
<emphasis role="bold">foobar</emphasis> 
<subject role="bold">Barbar</subject> 
</para> 

Changed Ihre xml ein bisschen, vielleicht werden Sie so etwas wie dies wollen:

XmlNode node = doc.DocumentElement.SelectSingleNode("/para"); 
Console.WriteLine(node.Name); 
foreach (XmlNode n in node.ChildNodes) 
{ 
    if (n.Name == "para" || n.Name == "emphasis" || n.Name == "subject") 
    { 
    if (!String.IsNullOrWhiteSpace(n.InnerText)) 
    { 
     Console.WriteLine(n.Name + " - " + n.InnerText); 
    } 
    } 
} 

Dann habe ich diese:

para 
emphasis - foobar 
subject - Barbar 

Um es zusammenzufassen Sie nie die Innertext erhalten vom Elternknoten, nur von seinen Kindern. Und es gibt eine Reihe von verschiedenen Möglichkeiten, es auch zu tun. Hoffe, dieser hilft!

Quelle: Ich habe es gerade auf einer Konsolen-App getestet. Obs: Das doc-Objekt ist das geladene XML-Dokument btw.

+0

Danke, ich werde morgen bei der Arbeit versuchen :) Ich gebe dir mein Feedback –

+0

Edit: in der Tat, das ist, wie ich es bereits benutze: / –

Verwandte Themen