簡體   English   中英

XML排序以保留根數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM