【问题标题】:XML Sort to retain root dataXML 排序以保留根数据
【发布时间】:2014-10-01 09:28:09
【问题描述】:

我是 C# 新手,有一个问题希望有人能帮助我解决?

我有一个非常小的代码 sn-p 来对一个大的 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>

因此“传输*”标签被剥离。

有人可以帮忙吗?

【问题讨论】:

    标签: c# xml linq sorting


    【解决方案1】:

    当您调用root.RemoveAll(); 时,所有元素都会被删除。您实际上只希望删除“重新排序”的元素。重写您的代码,以便它首先删除节点,然后重新插入它。

    代替

    root.RemoveAll();
    foreach (XElement tab in orderedtabs)
        root.Add(tab);
    

    使用

    foreach (XElement tab in orderedtabs)
    {
        tab.Remove();
        root.Add(tab);
    }
    

    Remove() 方法不需要元素的特定位置,也不会删除内存中的元素;它只是从其父元素中弹出元素。

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多