2016-06-01 6 views
-1

Ich möchte einen Text, der Tag drei in eine Liste enthält, konvertieren. Beispiel:.NET konvertieren drei Tag in Liste

var raw = @"<root><group><tag1>text1</tag1><tag3>text3</tag3</group><tag2>text2</tag2></root>"; 

Und ich brauche so etwas haben:

Dictionary<string,string> dicTags = new Dictionary<string,string>(); 
dicTags["tag1"] = "text1"; 
dicTags["tag3"] = "text3"; 
dicTags["tag2"] = "text2"; 

Hier ist ein Beispiel (in Betrieb, aber nicht mit diesem Mehrfach drei). Das zugegebene Tag <group></group> machen es fehlschlagen:

var raw = @"<root><group><tag1>text1</tag1><tag3>text3</tag3></group><tag2>text2</tag2></root>"; 
var doc = XDocument.Parse(raw); 
var result = doc.Root.Elements().ToDictionary(e => (string)e.Name.LocalName, e => (string)e); 
foreach(var kv in result){ 
    Console.WriteLine("Key: {0}, Value: {1}", kv.Key, kv.Value); 
} 
+0

Die andere Frage ist beantwortet. Das ist ziemlich ähnlich, aber das ist eigentlich eine andere Frage. Weil das Tag es fehlschlagen lässt:/ – KingOfBabu

+0

Was sind Ihre Kriterien für das, was zum Wörterbuch hinzugefügt wird? Nur Elemente ohne Kindelemente? Alles was mit "tag" beginnt? –

+0

Alles, was einen direkten Wert hat. hat keine, aber text1 hat den Wert text1 darauf. Also muss es kein Kind und keinen Wert darin haben. – KingOfBabu

Antwort

1

Nach der Lektüre Ihrer Kommentare kam ich mit auf den Punkt:

var raw = 
    @"<root><group><tag1>text1</tag1><tag3>text3</tag3></group><tag2>text2</tag2></root>"; 
var doc = XDocument.Parse(raw); 
var result = doc.Descendants() 
      .Where(el => !el.HasElements) 
      .ToDictionary(k => k.Name, v => v.Value); 

Wenn Sie Tags wie <tag4><tag4> (keine Nachkommen und leeren Wert) ignorieren wollen dann die ändern Zustand auf die folgenden:

.Where(el => !el.HasElements && !string.IsNullOrEmpty(el.Value)) 
1

Verwenden XMLDocument Last Zeichenfolge mit LoadXML() -Methode als Ihre xmlString lesen.

XmlDocument xdoc = new XmlDocument(); 
xdoc.LoadXml(xmlstring); 

foreach(XmlNode node in doc.DocumentElement.ChildNodes){ 
    string text = node.InnerText; 
} 
Verwandte Themen