2016-06-01 1 views
-1

タグ3を含むテキストをリストに変換したいと思います。例:.NETは3つのタグをリストに変換します

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

そして、私はこのような何か持っている必要があります。ここでは

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

は、例えば、(この複数の3での作業ではなく)です。付加されたタグ<group></group>それは失敗します

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

その他の質問に回答します。これは全く同じですが、これは実際には他の質問です。 タグが失敗するため、/ – KingOfBabu

+0

辞書に追加されるものは何ですか?子要素を持たない要素のみ? 'tag'で始まるものは何ですか? –

+0

直接値を持つもの。 には1つもありませんが、テキスト1の値はtext1です。だから、それは子供も価値も持たなくてはならない。 – KingOfBabu

答えて

1

あなたのコメントを読んだ後、私はこの思い付いた:あなたは<tag4><tag4>(ノー子孫と空の値)のようなタグを無視したい場合は

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

、その後変更以下の条件:

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

使用XMLDocumentあなたXMLstringを読むよりもLoadXML()メソッドを使用して文字列をロードします。

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

foreach(XmlNode node in doc.DocumentElement.ChildNodes){ 
    string text = node.InnerText; 
} 
関連する問題