2016-09-26 3 views
0

Zum Beispiel habe ich diese XML-Zeichenfolge:Wie bekomme ich Innertext und InnerXml eines Knotens von XmlDocument?

<?xml version="1.0" encoding="utf-8"?> 
<data> 
    <text>How to get <bold>all</bold> this string's content?</text> 
</data> 

Ich möchte alle diese Elemente von Objekten in einem Array erhalten (für jedes Objekt, das ich eine Klasse), ohne ihre Struktur zu verlieren:

[1] (TextClass; where bold = false) How to get 
[2] (TextClass; where bold = true) all 
[3] (TextClass; where bold = false) this string's content? 

Alles, was ich gerade mit XmlDocument und Klassen bekomme, ist InnerText oder InnerXml getrennt.

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load("example.xml"); 
foreach (XmlNode child in xmlDoc.DocumentElement.ChildNodes) 
{ 
    string chName = child.Name; // text 
    string text = child.InnerText; // How to get all this string's content? 
    string xml = child.InnerXml; // How to get <bold>all</bold>this string's content? 
} 

Ist es möglich?

+0

Was fragen Sie eigentlich hier? Du hast die Kinder. Was fehlt dir? Iterate durch 'ChildNodes' und erstelle eigene Klasseninstanzen entsprechend. Fügen Sie sie zu einer 'Liste ' oder was auch immer hinzu. Oder benutze LINQ. –

+0

@EdPlunkett Was ich versuche zu erreichen ist, dass ich die Sequenz von Text bekommen möchte, in der ich einen XmlNode haben werde, der anzeigt, dass dieser Text stilisiert ist. Durch die Iteration von Throw Child Nodes verliere ich diese Sequenz, weil ich den Text und den stilisierten Text getrennt voneinander erhalten werde. –

+0

Welche Sequenz von Text? Was stimmt nicht mit dem, was du hast? Können Sie mir ein Beispiel für eine Folge von Kindknoten zeigen, die in "ChildNodes" nicht in der richtigen Reihenfolge angezeigt werden? Was meinst du "getrennt voneinander"? –

Antwort

1

Für diese Art von Arbeit denke ich, es ist einfacher, die LINQ to XML zu verwenden.

In Ihrem Beispiel so etwas wie die folgenden funktionieren könnte (je nach genau das, was Sie erreichen wollen):

XDocument doc = XDocument.Parse(xml); 
var textClasses = from n in doc.Descendants("text").DescendantNodes() 
        where n.NodeType == XmlNodeType.Text 
        select new { text = ((XText)n).Value, bold = n.Parent?.Name == "bold" }; 

Und ein .net fiddle so schnell wie das Ergebnis sehen.

Verwandte Themen