当我有两个XML对象时,如何使用XPath比较它们的完全相等(所有相同的节点和属性和值)?使用XPath比较两个XML对象的准确性是否相等
9
A
回答
7
在XPath 2.0中,使用标准函数deep-equal()。
Xpath 1.0没有这样的功能,因此比较需要在托管XPath的语言中执行。
您可以使用此解决方案的情况下,必须使用XPath 1.0:Generate/get xpath from XML node java得到XPath表达式的集合为Document1
每个节点并为Document2
每个节点XPath表达式的另一个集合。然后比较两个集合 - 它们应该具有相同数量的表达式,并且表达式必须是相同的。
或者,您可以生成只验证两个集合包含相同数量的表达式和Document2
应用每个表达式为Document1
。
5
XPath 2.0的功能相当于:http://www.w3.org/TR/xpath-functions/#func-deep-equal。 XPath 1.0没有任何可比性,您需要使用XPath 1.0所使用的任何主机语言来推出自己的产品。
0
我已经使用了XSLT 1.0和Bash的组合,根据它们的md5sums来比较特定的节点。
使用test =“$ index = $ navigator”,因为我无法直接复制基于节点[$ navigator]的内容。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="http://www.example.org">
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:param name="navigator"/>
<xsl:param name="part"/>
<xsl:template match="/">
<xsl:for-each select="/ns:mappings/ns:mapping">
<xsl:variable name="index" select="position()" />
<xsl:if test="$index=$navigator">
<xsl:choose>
<xsl:when test="$part='source'">
<xsl:copy-of select="ns:source/ns:taxonpath"/>
</xsl:when>
<xsl:when test="$part='target'">
<xsl:copy-of select="ns:target/ns:taxonpath"/>
</xsl:when>
<xsl:when test="$part='mapping'">
<xsl:copy-of select="."/>
</xsl:when>
</xsl:choose>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
mappingcount=$(cat mapping.xml | grep "<mapping>" | wc -l)
counter=1
while [ $counter -lt $mappingcount ]; do
sourcehash=$(xsltproc --stringparam navigator $counter --stringparam part source compare.xslt mapping.xml | md5sum | cut -d " " -f1)
targethash=$(xsltproc --stringparam navigator $counter --stringparam part target compare.xslt mapping.xml | md5sum | cut -d " " -f1)
if [ "$sourcehash" == "$targethash" ]; then
xsltproc --stringparam navigator $counter --stringparam part mapping compare.xslt mapping.xml
fi
let counter=counter+1
done
而且mapping.xml的一部分
<mappings xmlns="http://www.example.org">
<mapping>
<source>
<taxonpath>
<taxon>
<id>c001f86a-4f8f-4420-bd78-381c615ecedc</id>
<entry>Aardrijkskunde</entry>
</taxon>
<taxon>
<id>65c33fa0-420a-4399-a6f8-595294179df3</id>
<entry>Weer en klimaat</entry>
</taxon>
</taxonpath>
</source>
<relationship>ter info</relationship>
<target>
<taxonpath>
<taxon>
<id>c001f86a-4f8f-4420-bd78-381c615ecedc</id>
<entry>Aardrijkskunde</entry>
</taxon>
<taxon>
<id>65c33fa0-420a-4399-a6f8-595294179df3</id>
<entry>Systeem aarde</entry>
</taxon>
</taxonpath>
</target>
</mapping>
</mappings>
相关问题
- 1. 如何比较C++中的两个ostream对象是否相等?
- 2. 确定两个对象是否相等
- 3. 比较两个整数对象是否相等,无论类型
- 4. 比较两个DRIVER_OBJECT是否相等?
- 5. 使用Xpath比较两个xml字段
- 6. 比较两个复杂对象的相等性
- 7. 如何比较两个对象在Scala中的相等性?
- 8. 比较两个游标对象的相等性
- 9. 新对象的值相等性比较
- 10. 比较两个相同类型的对象是否相等,没有公共getters?
- 11. 比较两次公差是否相等?
- 12. 比较两组是否相等递归?
- 13. 如何使用Javascript比较两个数组是否相等?
- 14. 比较shared_ptr对象相等
- 15. 相等对象比较:JAVA
- 16. 测试两个对象是否相等
- 17. 比较三个值是否相等
- 18. 比较两个Json对象的属性
- 19. 比较任意类型的两个对象的等价性
- 20. 如何比较模板中的两个typedesc是否相等
- 21. 比较两个不同阵列中的值是否相等
- 22. 比较两个散列的哈希值是否相等
- 23. 比较两个图像是否相同
- 24. 两个对象的相等性
- 25. 比较两个HashMaps关键字是否相等?
- 26. 比较在vb.net两个日期它们是否相等或不
- 27. 如何比较两个意图是否相等
- 28. 断言语句比较两个文件是否相等
- 29. 如何比较两个张量在特征中是否相等?
- 30. 比较两个numpy数组是否相等,元素方式