如何对节点元素重新排序,使其与xsd:sequence顺序匹配?

问题描述

如果我正确地理解了您的问题,那么您想要的是一种“神奇的”(如简单的方式)根据外部XSD重新安排节点的方式,而不是使用一些XML API来移动节点的方式。

如果为true,那么我还不知道有任何API提供了实现此类问题的通用方法。考虑到XSD能够描述的内容模型的复杂性,它也不是一件容易的事。

在非常简单的情况下,实际上也无法解决。考虑一个非常简单的示例:想象一个由两个选择组成的内容模型,即i)序列a-b-c,ii)序列b-c-a。XML内容按c- b-a的顺序排列(根据您的要求,您要采用无效的XML并使其有效)。在此示例中,哪种方法是正确的?

当然,我并不是说这是您的情况。我只是想指出为什么据我所知没有人提出解决这一问题的办法。

如果序列下的内容模型非常琐碎,从而允许采用明确的方式来解决它,而与XML到达的顺序无关,或者XML内容始终以已知但错误的方式出现,那么您必须使用您首选的XML操作方法对其进行编码- 但我建议您不要尝试使其通用,它只是顺其自然;)…。

解决方法

有什么方法可以对Node对象中的元素进行重新排序,以使其与xsd:sequence顺序匹配?我已阅读的文档Node.normalize,但似乎没有执行该功能。还有什么可以做的吗?

我相信可以使用XSLT做到这一点,但这听起来像是使用XSLT的解决方案太复杂了,而且它是一个特殊的java- xlst解析器来执行操作,而不是拥有Java原生的东西。

还是我实际上需要编写一个复杂的函数来为我做处理?