如何迭代和列出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。我知道如何获取属性值,但不确定如何获取属性名本身。我怎么做呢?
如果您能够切换到使用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);
}