给定以下XML:
<Student number=2020 >
<Subject>Comp<Subject>
<Credintials>
<Password>....</Password>
</Credintials>
<PersonalDetails age=30 height=2/>
</Student>
我想得到:
Student
@number
Subject
Credintials
Password
PersonalDetails
@age
@height
按此顺序。
因此,基本上,如果我解析这个XDocument,我会分别获得元素和属性,这违反了xml层次结构。
var attributes = xDocument.Descendants().Attributes();
var elements = xDocument.Descendants().Elements();
我单独循环,因此我首先获得属性,然后获得元素
有没有办法用上面的顺序列出?
您可以递归地返回元素名称、属性名称和子元素:
public IEnumerable<string> GetNodes(XElement xe)
{
yield return xe.Name.ToString();
foreach(XAttribute xa in xe.Attributes())
yield return ("@"+xa.Name);
foreach(XElement xee in xe.Elements())
foreach(var s in GetNodes(xee))
yield return s;
}
用法:
string xml = @"<Student number='2020'>
<Subject>Comp</Subject>
<Credintials>
<Password>....</Password>
</Credintials>
<PersonalDetails age='30' height='2'/>
</Student>";
XDocument x = XDocument.Parse(xml);
var nodes = GetNodes(x.Root);
结果:
IEnumerable<String> (8 items)
------------------------------
Student
@number
Subject
Credintials
Password
PersonalDetails
@age
@height