[英]XML Sort to retain root data
我是C#新手,有一個問題,希望有人可以幫助我嗎?
我有一個非常小的代碼片段來對大型XML文件進行排序。
using System;
using System.Linq;
using System.Xml.Linq;
public class XMLsort
{
public static void Sort(string netMyFile, string netOutFile)
{
XElement root = XElement.Load(netMyFile);
var orderedtabs = root.Elements("aidocument")
.OrderBy(xtab => (string)xtab.Element("aidocumentheader").Element("accountno"))
.ToArray();
root.RemoveAll();
foreach (XElement tab in orderedtabs)
root.Add(tab);
root.Save(netOutFile);
}
}
效果很好,但是它刪除了一些根標簽,我想知道如何將它們保留在排序的輸出中?
原始XML是:
<?xml version="1.0" encoding="windows-1252" ?>
<aitransmission xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance xsi:noNamespaceSchemaLocation="C:\Myschema\mysampleschema.xml">
<transmissionid>20120730DOCS</transmissionid>
<transmissiontime>23:02:19</transmissiontime>
<transmissiondate>2012-27-07</transmissiondate>
<transmissionsource>fromprd</transmissionsource>
<transmissioncount>71</transmissioncount>
<aidocument documenttype="adv">
[data]
</aidocument>
<aidocument documenttype="adv">
[data]
</aidocument>
<aidocument documenttype="adv">
[data]
</aidocument>
</aitransmission>
返回的XML為:
<?xml version="1.0" encoding="utf-8"?>
<aitransmission>
<aidocument documenttype="adv">
[sorted data]
</aidocument>
<aidocument documenttype="adv">
[sorted data]
</aidocument>
<aidocument documenttype="adv">
[sorted data]
</aidocument>
因此,“ transmission *”標簽被剝離。
有人可以提供一些幫助嗎?
當您調用root.RemoveAll();
所有元素都將被刪除。 您實際上只希望刪除“重新排序”的元素。 重寫您的代碼,以便它首先刪除該節點,然后將其重新插入。
代替
root.RemoveAll();
foreach (XElement tab in orderedtabs)
root.Add(tab);
采用
foreach (XElement tab in orderedtabs)
{
tab.Remove();
root.Add(tab);
}
Remove()
方法不需要元素的特定位置,並且也不會從內存中刪除元素。 它只是從其父項中彈出該元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.