C# 对XmlDocument中的所有XmlNode进行排序
我有一个C# 对XmlDocument中的所有XmlNode进行排序,c#,xml,linq,sorting,xmldocument,C#,Xml,Linq,Sorting,Xmldocument,我有一个XML文件(XmlDocument),其中包含如下所示的数据 <?xml version="1.0" encoding="utf-8"?> <xml> <transactions> <transaction date="03022014" type="document"> <document name="Page1"> <data>
XML
文件(XmlDocument),其中包含如下所示的数据
<?xml version="1.0" encoding="utf-8"?>
<xml>
<transactions>
<transaction date="03022014" type="document">
<document name="Page1">
<data>
<document>
<attribute name="Position" value="4"/>
<attribute name="qty" value="1"/>
<attribute name="number" value="1202"/>
</document>
<document>
<attribute name="Position" value="3"/>
<attribute name="qty" value="1"/>
<attribute name="number" value="1203"/>
</document>
<document>
<attribute name="Position" value="2"/>
<attribute name="qty" value="1"/>
<attribute name="number" value="1205"/>
</document>
<document>
<attribute name="Position" value="1"/>
<attribute name="qty" value="1"/>
<attribute name="number" value="1206"/>
</document>
</data>
</document>
</transaction>
</transactions>
</xml>
我想按“位置”对
元素进行排序。
应该是这样的
<?xml version="1.0" encoding="utf-8"?>
<xml>
<transactions>
<transaction date="03022014" type="document">
<document name="Page1">
<data>
<document>
<attribute name="Position" value="1"/>
<attribute name="qty" value="1"/>
<attribute name="number" value="1206"/>
</document>
<document>
<attribute name="Position" value="2"/>
<attribute name="qty" value="1"/>
<attribute name="number" value="1205"/>
</document>
<document>
<attribute name="Position" value="3"/>
<attribute name="qty" value="1"/>
<attribute name="number" value="1203"/>
</document>
<document>
<attribute name="Position" value="4"/>
<attribute name="qty" value="1"/>
<attribute name="number" value="1202"/>
</document>
</data>
</document>
</transaction>
</transactions>
</xml>
这在LINQ
中可能吗?
我试图用LINQ
解决它,但它不起作用是的
XElement xml = XElement.Load(path_to_xml);
XElement dataElement = xml.Descendants("data").FirstOrDefault();
if (dataElement != null)
{
var sortedAttributeElements = dataElement.Elements("document")
.Where(x => x.Attribute("name") != null && x.Attribute["name"] == "Position")
.OrderBy(x => x.Attribute("value").Value);
var sortedDocumentElements = sortedAttributeElements.Select(x => x.Parent);
}
//replace old "data" element content with "sortedDocumentElements" and save
您的问题已经存在于StackOverflow@Perfect中,谢谢您的帮助。
var xDoc = XDocument.Load("path");
var documents = xDoc.Descendants("document").Where(x => (string)x.Attribute("name") != "Page1")
.OrderBy(x => (int)(x.Elements("attribute").First().Attribute("value")))
.ToList();
var data = xDoc.Descendants("data").First();
data.Remove();
var document = xDoc.Descendants("document").First(x => (string)x.Attribute("name") == "Page1");
document.Add(new XElement("data", documents));
xDoc.Save("path");