2011-10-22 51 views
7
的属性

我的输入是一个如自爆XML:排序的Xml

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

,我要排序的通过XML 字母布局研究他们的第一个字符的名称顺序属性基地等自爆XML:

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

谢谢。

+2

'LastName'不是属性。它是一个元素名称。你的XML有一个错误的语法。 –

+0

哦,是的,谢谢你的注释。 – SMD

+2

你为什么要这样做?属性顺序对于任何兼容的解析器来说都是不重要的... –

回答

9

你的输出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> 
0

XML文档作为字符串,您应该将它们转换为Canonical XML。这涉及到的不仅仅是将属性转化为规范的顺序:例如,它涉及规范化空白和可能的命名空间前缀。寻找一个XML规范化实用程序。