Xml的排序属性

本文关键字:属性 排序 Xml | 更新日期: 2023-09-27 18:12:10

我的输入就像吹过的Xml:

<Phrase Entry="ID">
 <Ans number="1">
  <Identification LastName="Bornery" Name="John" Age="23"/>
 </Ans>
</Phrase>

,我想根据它们的第一个字符名称顺序对Xml属性进行排序按字母顺序排列,例如:

<Phrase Entry="ID">
 <Ans number="1">
  <Identification Age="23" LastName="Bornery" Name="John" />
 </Ans>
</Phrase>

谢谢。

Xml的排序属性

您的输出xml是错误的,但如果输入是这样的:

<Phrase Entry="ID">
 <Ans number="1">
  <Blah LastName="Bornery" Name="John" Age="23"/>
 </Ans>
</Phrase>

那么下面的代码

static string SortAttributes(string xml)
{
    var doc = XDocument.Parse(xml);
    foreach (XElement element in doc.Descendants())
    {
        var attrs = element.Attributes().ToList();
        attrs.Remove();
        attrs.Sort((a, b) => a.Name.LocalName.CompareTo(b.Name.LocalName));
        element.Add(attrs);
    }
    xml = doc.ToString();
    return xml;
}

将返回这个

<Phrase Entry="ID">
  <Ans number="1">
    <Blah Age="23" LastName="Bornery" Name="John" />
  </Ans>
</Phrase>

如果希望将两个XML文档作为字符串进行比较,则应该将它们转换为规范XML。这涉及到的不仅仅是将属性转换为规范顺序:它还涉及到,例如,规范化空白和名称空间前缀。寻找XML规范化实用程序