當我有兩個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. 如何比較兩個對象在Scala中的相等性?
- 4. 新對象的值相等性比較
- 5. 比較兩次公差是否相等?
- 6. 比較兩組是否相等遞歸?
- 7. 相等對象比較:JAVA
- 8. 測試兩個對象是否相等
- 9. 比較兩個圖像是否相同
- 10. 兩個對象的相等性
- 11. 比較兩個對象是在MbUnit的
- 12. Smalltalk - 比較兩個字符串是否相等
- 13. 比較在vb.net兩個日期它們是否相等或不
- 14. 如何比較兩個張量在特徵中是否相等?
- 15. 比較兩個字符串是否相等
- 16. 使用node.js比較兩個對象
- 17. MATLAB - 如何比較兩個對象是相同還是不同
- 18. 準確比較兩個文本
- 19. 比較兩個對象。
- 20. 比較兩個對象
- 21. 比較兩個對象,java
- 22. 比較兩個對象
- 23. 比較兩個對象
- 24. 比較兩個Doctrine_Record對象
- 25. 確定兩個複數是否相等
- 26. 如何使用GSON比較兩個JSON字符串是否相等?
- 27. 使用相等運算符來比較兩個地形雙打是否安全?
- 28. 比較如果兩個的NSDate對象是相同
- 29. 比較兩個實現相同/相等接口的對象 - 設計幫助
- 30. 如果比較兩個序列相等