我有以下结构的 xml
<ruleDefinition appId="3" customerId = "acf">
<node alias="element1" id="1" name="department">
<node alias="element2" id="101" name="mike" />
<node alias="element2" id="102" name="ricky" />
<node alias="element2" id="103" name="jim" />
</node>
</ruleDefinition>
这里的节点是使用别名来区分的,而不是节点标签。如您所见,顶级节点 element1 与 element2 具有相同的节点名称“node”。我想根据属性别名解析这个 XML。
Linq-To-Xml 代码(使用 C#)应该是什么?
最佳答案
这是一种将数据结构解析为包含 Element1 字符串属性和 IEnumerable Element2 属性的项目的方法,其中包含您的多个 element2 数据。
string xml = @"<ruleDefinition appId=""3"" customerId = ""acf"">
<node alias=""element1"" id=""1"" name=""department"">
<node alias=""element2"" id=""101"" name=""mike"" />
<node alias=""element2"" id=""102"" name=""ricky"" />
<node alias=""element2"" id=""103"" name=""jim"" />
</node>
</ruleDefinition>";
XDocument document = XDocument.Parse(xml);
var query = from node in document.Descendants("node")
where node.Attribute("alias").Value == "element1"
select new
{
Element1 = new
{
Id = node.Attribute("id").Value,
Name = node.Attribute("name").Value
},
Element2 = from n in node.Descendants("node")
where n.Attribute("alias").Value == "element2"
select new
{
Id = n.Attribute("id").Value,
Name = n.Attribute("name").Value
}
};
foreach (var item in query)
{
Console.WriteLine("{0}\t{1}", item.Element1.Id, item.Element1.Name);
foreach (var element2 in item.Element2)
Console.WriteLine("\t{0}\t{1}", element2.Id, element2.Name);
}
关于c# - 使用属性节点解析 Linq To Xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2538424/