c# - 使用属性节点解析 Linq To Xml

标签 c# xml linq c#-3.0 linq-to-xml

我有以下结构的 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/

相关文章:

XML 转换自动化

java - 如何从 Android 中返回 XML 或 JSON 的 url 获取数据

c# - 带 GroupBy 的 Linq 表达式

C#,如何在 foreach 循环期间将字符串拆分为新行?

c# - 将 long 转换为对象然后转换为 ulong

php - 如何创建 PHP SOAP 请求和响应

c# - AnonymousType0#1`6 中的 # 符号是什么意思?

c# - ASP.NET MVC 递归过程

c# - 导入 "non-relevant"dll 是否会降低性能?

c# - Entity Framework 连接字符串