如何重新排列xml中的元素?

时间:2009-06-30 15:57:43

标签: c# .net xml reuters

XmlReader具有以下内容:

<ns0:Fields>
  <omm:Field DataType="Utf8String" Name="ROW80_3">
    <omm:Utf8String> Latam News </omm:Utf8String>
  </omm:Field>
  <omm:Field DataType="Int32" Name="RECORDTYPE">
    <omm:Int32>228</omm:Int32>
  </omm:Field>
  <omm:Field DataType="Utf8String" Name="ROW80_4">
    <omm:Utf8String>ATDNEWSRUS</omm:Utf8String>
  </omm:Field>
  <omm:Field DataType="Utf8String" Name="ROW80_1">
    <omm:Utf8String>12:28 27JUN09    PRODUCT LIST</omm:Utf8String>
  </omm:Field>
  <omm:Field DataType="Utf8String" Name="ROW80_2">
    <omm:Utf8String>ATDNEWSLATAM</omm:Utf8String>
  </omm:Field>
  <omm:Field DataType="Utf8String" Name="BQOS">
    <omm:Utf8String>0</omm:Utf8String>
  </omm:Field>
</ns0:Fields>

如何重新排列元素以从ROW80_1开始并以ROW80_4结束。

3 个答案:

答案 0 :(得分:5)

如果你可以使用XLinq,事情变得更加简单:

XDocument doc = XDocument.Parse(@"..."); 

var children = doc.Elements().Single().Elements().OrderBy(element => (string) element.Attribute("Name"));

var newRoot = new XElement(((XNamespace) "yourNamespaceHere") + "Fields",
 new XAttribute(XNamespace.Xmlns + "nso", "yourNamespaceHere"),
 new XAttribute(XNamespace.Xmlns + "omm", "otherNamespace"),
 children);

var newDocument = new XDocument(newRoot);
Console.WriteLine(newDocument); 

您还可以过滤掉元素。

答案 1 :(得分:0)

XmlReader无法重新排列元素。但是,根据您加载到的位置(例如XmlDocument等),您可以在之后重新排列它们。

答案 2 :(得分:0)

正如Lucero所提到的,您无法使用XmlReader类重新排列Xml文档,但是可以通过使用临时可排序数据存储通用字典或使用所有文档重新创建文档来逻辑重新排列文档中包含的数据重新安排你的元素。