【发布时间】:2022-01-06 02:37:09
【问题描述】:
在 C# 中,按字母顺序对 XML 文档进行排序的最佳方法是什么——元素和属性?例如,如果我以 b.xml 开头,它应该以 a.xml 开头:
目前,我正在考虑递归遍历所有元素,对于每个元素,我将删除其子元素,然后按字母顺序再次添加它们,并对属性执行相同操作。
这是我应该采取的方法还是有更好的方法或现成的功能?
【问题讨论】:
-
你想做什么?顺序可能很重要,具体取决于 XSD 所说的内容。更改顺序可能会更改文档的含义。如果您想按特定顺序读取元素,您可以申请
OrderBy,尤其是在您使用 XDocument 和 LINQ-to-XML 时。如果您还想以新顺序编写元素,则必须创建一个新文档并递归添加有序节点 -
为什么要这样做? XML 是结构化数据,其中元素的顺序可能很重要(您能想象一个按字母顺序排列的 HTML 文档吗?)。
-
perhaps a ready-made function?否,因为这是一个非常专业的功能,实际上可能会改变文档的含义。虽然差异化可能有意义,但它会导致真实文档出现问题。想象一下工作流程中的步骤,或空中旅行中的腿。虽然使用 LINQ 并不难——你已经可以使用迭代器遍历树,OrderBy提供排序 -
如果您想区分两个 XML 文档,您可以使用 不 关心顺序的集合操作。另一方面,如果您想对 XML 数据进行排序以便可以使用合并工具,那么排序是有意义的。但是,许多 diff 工具可以忽略 XML 元素的顺序。另一方面,您可以加载两个 XDocument 并使用迭代器对它们进行比较。如果您能想出一种方法来使用密钥识别令牌,您可以将 XDocument 展平为令牌并使用集合操作比较两个令牌流
-
正如问题所述,我正在尝试按字母顺序对 XML 文档进行排序。除了按字母顺序排序之外,我不想做任何事情。这正是我想要的,这正是我的问题所陈述的。