【发布时间】:2011-07-12 17:01:42
【问题描述】:
我想通过 XSLT 比较两个 XML 文件。如果文档 1 中特定类型的所有元素都位于文档 2 中的相同 XPath 位置,则应认为比较成功。
考虑
<entry>
<entry1>
<entry2>
<value type="1"/>
</entry2>
</entry1>
</entry>
作为文档 1。
被观察的元素是位于entry/entry1/entry2的“value”(属性type=1)。因此,在这个意义上与
进行比较<entry>
<entry0/>
<entry0/>
<entry1>
<entry2>
<value type="1"/>
</entry2>
</entry1>
</entry>
应该被认为是成功的,而
<entry>
<entry1>
<value type="1"/>
</entry1>
</entry>
不成功,因为“值”(属性 type=1)位于 entry/entry1。还 与
的比较<entry>
<entry1>
<entry2>
<value type="2"/>
</entry2>
</entry1>
</entry>
应该认为不成功,因为value的属性是type=2。
我在 XSLT 中完成这项任务的天真尝试是这样的:
<xsl:template match="value">
<xsl:if test="not(document($doc2)/.[@type=@type])">
<xsl:text>something is missing</xsl:text>
</xsl:if>
</xsl:template>
这种方法不成功,因为在第二个文档中选择所需的 XPath 似乎不起作用。
也许您对如何解决这个问题有想法?
马特
【问题讨论】:
-
如果您只需要测试几个元素,最好的方法可能是手动编写测试 XPath,针对不同的文件执行它们并比较结果。否则我不知道这个问题的简单解决方案。
-
我不明白你的比较。
<entry><entry1><entry2><value type="1"/></entry2></entry1></entry>与entry><entry0/><entry0/><entry1><entry2><value type="1"/></entry2></entry1>非常不同。为什么他们之间的比较会成功? -
好的,不要称它为“比较”,而是“检查 doc1 中观察到的每个元素是否存在于 doc2 中的相同 XPath 中”。我将按照以下答案中的建议尝试 deep-equal。
标签: xslt file-comparison