需要根据元素属性对XML/Xdocument重新排序

需要根据元素属性对XML/Xdocument重新排序,xml,c#-4.0,linq-to-xml,Xml,C# 4.0,Linq To Xml,我正在尝试根据显示顺序对XML重新排序。我的XML是: <ArrayOfCableItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <CableItem> <ItemID>6</ItemID> <CableID>146242</CableID>

我正在尝试根据显示顺序对XML重新排序。我的XML是:

<ArrayOfCableItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <CableItem>
    <ItemID>6</ItemID>
    <CableID>146242</CableID>
    <FabID></FabID>
    <Description>C</Description>
    <ItemValue></ItemValue>
    <Unit/>
    <ItemComment/>
    <Level>MET-JBOX J1</Level>
    <Jack/>
    <Type>Marker</Type>
    <CableType>FreeForm</CableType>
    <DisplayOrder>3</DisplayOrder>
  </CableItem>
  <CableItem>
    <ItemID>540867</ItemID>
    <CableID>146242</CableID>
    <FabID>1398</FabID>
    <Description>Routing</Description>
    <ItemValue>27</ItemValue>
    <ItemComment/>
    <Type>Routing</Type>
    <DisplayOrder>2</DisplayOrder>
  </CableItem>
</ArrayOfCableItem>
我已经试过了,我不知所措

 var reordered = xdoc
     .Element("ArrayOfCableItem")
     .Elements("CableItem")
     .OrderBy(DO => Convert.ToInt32(DO.Attribute("DisplayOrder")));
 XDocument doc2 = new XDocument(new XElement("ArrayOfCableItem"), reordered);

这些爆炸意味着加法操作可能会导致格式错误的xml

尝试如下所述,它正在工作

详细查看评论

         //LOAD THE XML 
         XDocument srcTree = XDocument.Load("C:\\Users\\<<USERID>>\\Desktop\\SampleXML.xml");

         //CREATE NEW XML OUTPUT
         XDocument doc = new XDocument(    
                         //ROOT ELEMENT       
                         new XElement("ArrayOfCableItem",
                         //FROM ALL ELEMENTS
                         from el in srcTree.Element("ArrayOfCableItem").Elements()
                         //ORDER BY "DISPLAYORDER" WHICH IS DESCENDANT ELEMENT
                         orderby (string)el.Descendants("DisplayOrder").First()  
                         //SELECT THE ELEMENTS ORDERED
                         select el ));

         //PRINT NEW XML IN CONSOLE
         Console.WriteLine(doc);
//加载XML
XDocument srcTree=XDocument.Load(“C:\\Users\\\\Desktop\\SampleXML.xml”);
//创建新的XML输出
XDocument doc=新XDocument(
//根元素
新XElement(“ArrayOfCableItem”,
//来自所有元素
来自srcTree.Element(“ArrayOfCableItem”).Elements()中的el
//按子元素“DISPLAYORDER”排序
orderby(string)el.substands(“DisplayOrder”).First()
//选择已排序的元素
选择el);
//在控制台中打印新的XML
控制台写入线(doc);

您提供了两件您尝试过的事情,但您没有告诉我们这两件事情的结果。
         //LOAD THE XML 
         XDocument srcTree = XDocument.Load("C:\\Users\\<<USERID>>\\Desktop\\SampleXML.xml");

         //CREATE NEW XML OUTPUT
         XDocument doc = new XDocument(    
                         //ROOT ELEMENT       
                         new XElement("ArrayOfCableItem",
                         //FROM ALL ELEMENTS
                         from el in srcTree.Element("ArrayOfCableItem").Elements()
                         //ORDER BY "DISPLAYORDER" WHICH IS DESCENDANT ELEMENT
                         orderby (string)el.Descendants("DisplayOrder").First()  
                         //SELECT THE ELEMENTS ORDERED
                         select el ));

         //PRINT NEW XML IN CONSOLE
         Console.WriteLine(doc);