2017-06-12 23 views
0

我想重新排序基於DisplayOrder的XML。我的XML是:需要重新排序基於偏離元素屬性的XML/Xdocument

<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> 

我曾嘗試以下

XDocument output = new XDocument(new XElement("ArrayOfCableItem", 
    from s in xdoc.Root.Elements() 
    orderby Convert.ToInt32(s.Attribute("DisplayOrder").Value) 
    select s)); 

我曾經嘗試這樣做,我很茫然

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

這些炸燬說,除了操作可能會導致在格式不正確的xml中

+1

你已經提供了兩個你已經嘗試過的東西,但是你沒有告訴我們他們兩個的結果是什麼。 –

回答

1

請嘗試如下所述,它正在工作。

查看評論的詳細信息。

  //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);