.NET将三个标记转换为列表

时间:2016-06-01 14:34:38

标签: c# .net xml dictionary

我想将包含标记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";

这是一个例子(工作但没有这个多个三个)。添加的标记<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);
}

2 个答案:

答案 0 :(得分:1)

在看完你的评论后,我想出了这个:

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

如果您想忽略<tag4><tag4>之类的标签(没有后代和空值),请将条件更改为以下内容:

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

答案 1 :(得分:1)

使用XMLDocument使用LoadXML()方法加载字符串,而不是读取XMLstring。

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

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