當我有兩個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數組是否相等,元素方式