我正在比较基于相同 XMLSchema 的两个 XML。XML 中的每个元素都有一个 id(id 没有说明顺序 - 最旧的 xmlElement 具有最低的 id 等等)。我的目标是在两个 XMLS 之间取得某种一致。
举一个非常简单的例子。让有两个xml。第一个看起来像这样:
<EleType>
<Ele id="1"/>
<Name id="2"/>
<Description id="100"/>
<UnknownOrderEle1 id="3"/>
</EleType>
第二个是这样的:
<EleType>
<Ele id="1"/>
<Name id="2"/>
<Description id="100"/>
<UnknownOrderEle2 id="4"/>
</EleType>
我的结果应该是 ids 的映射。它将以 1:1、2:2、100:100 很好地开始。此时我遇到了两个名称不同的 xml 元素。我知道它们可能不匹配,因此两种可能的解决方案是采用 3:* (其中 * = 符号表示不匹配)然后 *:4 或采用:4 然后 3:。但是只有一种方法是正确的解决方案,因为架构说 UnknownOrderEle2 (id=4) 应该在 UnknownOrderEle1 (id=3.
所以我在 XmlSchema 类中寻找任何东西,XmlSchemaInfo
, XmlSchemaElement
,... 告诉我有关元素顺序的任何信息。我发现的仅有的两种可能性对我来说没有真正的解决方案,因为它们要么太耗时,要么不干净。一种是比较(可能是不洁的)的LineNumber
和LinePosition
内的。XmlSchemaObject
另一种是从两个 xml 中构造一个 xml 并对其进行验证。如果它引发验证异常,我知道我选择的顺序是错误的(肯定很耗时)。
如果有人知道更好的解决方案,我将很高兴获得任何帮助。