根据定义的模式重新排序XML节点

时间:2010-01-27 22:33:48

标签: c# .net xml xsd

我正在将几个.xml文件合并在一起,并且需要从每个.xml文档中获取某些子元素并将它们放入第三个。这没关系,但问题是那时我的“子”节点有点随机顺序(好吧,我从第一个文件中选择的,然后是我从第二个文件中选择的),以及模式文件(.xsd如果您愿意,将这些孩子定义为“序列”或xs:sequence。因此输出文件不再通过验证,因为虽然每个文件按顺序都有其元素,但结果文件却没有。

我想知道的是,因为我有.xsd,并且我有一个“大部分”有效的.xml文件,C#中是否有任何方法可以根据所有节点“移动”所有节点在.xsd中定义的顺序没有太大的痛苦?显然我可以实现一种“排序”,但我希望有一些内置的东西。或者更好的是,自动执行此操作的内置合并也可以正常工作。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

查看要求,是否可以选择让XSD模型指导您?

您可以将XSD加载到XmlSchema类中。现在你可以得到模型了。通过遍历模式节点的子节点,您将获得保证订购。所以,低音

  • 从3个子文档中收集节点并将它们放在工作文档中(不是目标文档)。
  • 运行架构定义的结构以构建目标文档
  • 根据架构节点的顺序(按元素名称/ namespace-uri)从工作doc中选择节点,并将它们放在最终目标文档中

希望这有帮助,

答案 1 :(得分:1)

看看XmlSchemaValidator Class。 Tihs类执行“基于推送”的验证 - 它有效地告诉您接下来的有效性。也许您可以使用它来重新排序XML。我已经能够使用它来生成符合模式的示例XML。

答案 2 :(得分:0)

如果你可以控制.xsd,this post可能会提供一个起点。

当更改架构不是一个选项时,您仍然可以将xml转换为所需的结构。