使用XSLT是否可以比较两个xml?

时间:2016-11-28 13:41:25

标签: xml xslt-2.0

要找到两个xml文件之间的差异,是否可以使用XSLT,如果是,你可以共享一个小例子xslt ??请注意,xslt应该能够获取任何两个xml文件,它不应该采用任何特定的树结构

2 个答案:

答案 0 :(得分:1)

在开始使用XSLT或任何其他语言编写代码之前,您需要编写一个规范,指明程序要执行的操作。这是一个复杂的要求,无法在三行中定义。至少有一家公司--DioXML--以此为生。

第一个挑战是定义两个文件相同的含义。 (您可以采用fn:deep-equal作为起点的规范)。一旦你完成了这个,更难的问题是定义当文件不同时你想要产生什么输出。举一个非常简单的例子,你想要的文件输出是什么:

(a)中

<a><b/><c/></a>

(b)中

<a><c/><b/></a>

答案 1 :(得分:0)

从XSLT 2.0开始,如果需要,可以使用deep-equal https://www.w3.org/TR/xquery-operators/#func-deep-equal函数来比较一般的两个序列或两个文档节点。如果两个文件被认为是链接规范中定义的相等,则deep-equal(doc('file1.xml'), doc('file2.xml'))返回true。

至于找到“差异”,你甚至没有解释你正在寻找什么样的结果。商业版中的Saxon 9具有saxon:deep-equal,根据http://saxonica.com/html/documentation/functions/saxon/deep-equal.html允许您设置?标志和错误监听器

  

解释不匹配的原因。如果结果不相等,则发出警告   解释原因的消息将被发送到ErrorListener。 (在   一般情况下,将发送一系列警告消息   最低级别的差异并向上移动树)

但这不是标准化的东西。