假设我有以下XML字符串:
<?xml version="1.0" encoding="utf-8" ?>
<items>
<item1>value1</item1>
<item2>value2</item2>
<item3>value3</item3>
<item4>value4</item4>
<item5>value5</item5>
<item6>value6</item6>
</items>
我需要以通用的方式解析它,因为它可能会在以后更新,我不需要相应地修改我的代码。 所以我尝试了以下内容:
public static Dictionary<string, string> Parser(string xmlString)
{
Dictionary<string, string> parserDictionary = new Dictionary<string, string>();
using (StringReader stringReader = new StringReader(xmlString))
using (XmlTextReader reader = new XmlTextReader(stringReader))
{
// Parse the file and display each of the nodes.
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
parserDictionary.Add(reader.Name, reader.ReadString());
break;
}
}
}
return parserDictionary;
}
此代码有两个问题:
<items>
元素,我不需要
解析它<item1>
请告知
答案 0 :(得分:7)
为什么不这样:
var parserDictionary = XDocument.Create(xmlString)
.Descendants("items")
.Elements()
.Select(elem => new { Name = elem.Name.LocalName, Value = elem.Value })
.ToDictionary(k => k.Name, v => v.Value);
你甚至可以这样做:
var parserDictionary = XDocument.Create(xmlString)
.Descendants("items")
.Elements()
.ToDictionary(k => k.Name.LocalName, v => v.Value);
答案 1 :(得分:1)
如果您需要将XML转换为对象表示而不是简单的
XDocument xDoc = XDocument.Parse(xmlString);
这就是你真正需要做的。完成后,您可以使用xDoc
,Elements
,Element
,Attribute
和Attributes
属性查询Descendants
。
举个例子,这里有一些代码可以打印你的所有值
XDocument xDoc = XDocument.Parse(xmlString);
foreach(XElement e in xDoc.Elements())
{
Console.WriteLine(e.Value);
}