我有一个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。我知道如何获取属性值但不知道如何自己获取属性名称。我该怎么做?
答案 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);
}