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

时间:2014-08-25 17:17:43

标签: c# xml

我有一个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>

从这里我需要一个所有“产品”属性的列表。结果如下:

ID
Name
Serial
Color

我不需要值,只需要属性本身。我正在使用C#和Winforms。我知道如何获取属性值但不知道如何自己获取属性名称。我该怎么做?

2 个答案:

答案 0 :(得分:2)

如果您能够切换到使用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();

答案 1 :(得分:1)

使用LinqToXml

var doc = XDocument.Load("File.xml");

var attributes = doc.Element("product").Attributes();

foreach (var item in attributes)
{
    Console.WriteLine(item.Name);
}

它采用第一个&#34;产品&#34;的属性列表。节点。如果&#34;产品&#34;节点具有不同的属性,您需要收集所有然后区分列表结果:

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);
}