假设我有一个 XML 文档(表示为文本、W3C DOM 等等),还有一个 XML Schema。XML 文档具有模式定义的所有正确元素,但顺序错误。
如何使用架构“重新排序”文档中的元素以符合架构定义的顺序?
我知道这应该是可能的,可能使用XSOM,因为 JAXB XJC 代码生成器使用元素的正确序列化顺序注释其生成的类。
但是,我对 XSOM API 并不熟悉,而且它非常密集,所以我希望你们当中有人对它有一些经验,并且可以为我指明正确的方向。诸如“在这个父元素中允许哪些子元素,以及以什么顺序?”之类的东西。
让我举个例子吧。
我有一个这样的 XML 文档:
<A>
<Y/>
<X/>
</A>
我有一个 XML Schema,它说 的内容<A>
必须是 a<X>
后跟一个<Y>
. 现在很明显,如果我尝试根据模式验证文档,它会失败,因为<X>
and<Y>
的顺序错误。但是我提前知道我的文档是“错误的”,所以我还没有使用模式来验证。但是,我确实知道我的文档具有模式定义的所有正确元素,只是顺序错误。
我想做的是以编程方式检查模式(可能使用 XSOM - 这是 XML 模式的对象模型),并询问它的内容<A>
应该是什么。API 将公开“您需要一个<X>
后跟一个<Y>
”的信息。
因此,我使用我的 XML 文档(使用 DOM API)并相应地重新排列,以便现在该文档将根据架构进行验证。
了解 XSOM 是什么很重要——它是一个 java API,代表 XML Schema 中包含的信息,而不是我的实例文档中包含的信息。
我不想做的是从架构生成代码,因为架构在构建时是未知的。此外,XSLT 没有用处,因为元素的正确排序仅由模式中包含的数据字典确定。
希望现在已经足够明确了。