我想将包含标记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);
}
答案 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;
}