需要根据元素属性对XML/Xdocument重新排序
我正在尝试根据显示顺序对XML重新排序。我的XML是:需要根据元素属性对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>
<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);