如何迭代和列出XML节点属性

本文关键字:XML 节点 属性 何迭代 迭代 | 更新日期: 2023-09-27 18:19:19

我有一个XML文件,我正在将其加载到XmlDocument中,并且需要获得具有特定名称的节点上所有属性的列表。

   <shirts>
        <product ID="123" Name="tee" Serial="5678"/>
        <product ID="456" Name="crew" Serial="4566"/>
     </shirts>
    <pants>
         <product ID="123" Name="jeans" Serial="1243" Color="blue"/>
         <product ID="123" Name="dress" Serial="3455" Color="black"/>
         <product ID="123" Name="shorts" Serial="6654" Color="grey"/>
    </pants>

从这里我需要一个所有"product"属性的列表。结果如下:

ID
Name
Serial
Color

我不需要值,只需要属性本身。我正在使用c#和Winforms。我知道如何获取属性值,但不确定如何获取属性名本身。我怎么做呢?

如何迭代和列出XML节点属性

如果您能够切换到使用System.Xml.Linq类,您可以使用LINQ to XML来获得您想要的:

var xml = XElement.Load(xmlFileName);
var attrNames = (
    from p in xml.Descendants("product")
    from a in p.Attributes()
    select a.Name
).Distinct();

使用LinqToXml

var doc = XDocument.Load("File.xml");
var attributes = doc.Element("product").Attributes();
foreach (var item in attributes)
{
    Console.WriteLine(item.Name);
}

它从第一个"product"节点获取属性列表。如果"product"节点具有不同的属性,则需要收集所有属性,然后区分列表结果:

var doc = XDocument.Load("File.xml");
var attributes = doc.Elements("product").SelectMany(x => x.Attributes());
var uniqAtt = attributes.Select(x => x.Name).Distinct();
foreach (var item in uniqAtt)
{
    Console.WriteLine(item);
}