给定一个XML文档,如何列出所有符合XML文档顺序的属性和元素

本文关键字:XML 文档 顺序 元素 属性 一个 何列出 | 更新日期: 2023-09-27 18:29:07

给定以下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();

我单独循环,因此我首先获得属性,然后获得元素

有没有办法用上面的顺序列出?

给定一个XML文档,如何列出所有符合XML文档顺序的属性和元素

您可以递归地返回元素名称、属性名称和子元素:

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