Khi tôi có hai đối tượng XML, làm thế nào tôi có thể so sánh chúng với sự bình đẳng chính xác (tất cả các nút và thuộc tính và giá trị) bằng XPath?Sử dụng XPath để so sánh hai đối tượng XML để cân bằng chính xác
Trả lời
Trong XPath 2.0, hãy sử dụng hàm chuẩn deep-equal().
Xpath 1.0 không có chức năng như vậy, do đó việc so sánh cần được thực hiện trong ngôn ngữ lưu trữ XPath.
Bạn có thể sử dụng giải pháp này trong trường hợp bạn phải sử dụng XPath 1.0: Generate/get xpath from XML node java để có được một bộ sưu tập các biểu thức XPath cho mỗi nút của Document1
và một bộ sưu tập các biểu thức XPath cho mỗi nút của Document2
. Sau đó so sánh hai bộ sưu tập - chúng phải có cùng số biểu thức và các biểu thức phải tương đương nhau.
Hoặc, bạn có thể tạo chỉ xác minh rằng hai bộ sưu tập chứa cùng một số biểu thức và áp dụng từng biểu thức cho Document1
trên Document2
.
XPath 2.0 có hàm ngang bằng nhau cho điều đó: http://www.w3.org/TR/xpath-functions/#func-deep-equal. XPath 1.0 không có gì so sánh được, bạn sẽ cần phải cuộn của riêng bạn, trong bất kỳ ngôn ngữ máy chủ nào bạn sử dụng XPath 1.0 với.
Tôi đã sử dụng kết hợp XSLT 1.0 và Bash để so sánh các nút cụ thể với nhau dựa trên md5sums của chúng.
Sử dụng thử nghiệm = "$ index = $ navigator", vì tôi không thể sao chép dựa trên nút [navigator] trực tiếp.
<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
Và một phần của 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. So sánh hai đối tượng.
- 2. So sánh hai đối tượng
- 3. So sánh hai tệp xml sử dụng JAVA
- 4. java so sánh hai đối tượng Mẫu
- 5. So sánh đối tượng dữ liệu chính
- 6. So sánh hai đối tượng NSNumber
- 7. jQuery so sánh hai đối tượng DOM?
- 8. Làm thế nào để std :: tìm kiếm bằng cách sử dụng một đối tượng So sánh?
- 9. so sánh hai tệp xml với xslt?
- 10. Làm thế nào để so sánh hai đồ thị đối tượng .NET cho sự khác biệt?
- 11. So sánh hai tài liệu bằng cách sử dụng regex
- 12. So sánh hai Lược đồ XML
- 13. So sánh hai cấu trúc bằng cách sử dụng ==
- 14. cách chính xác để so sánh toán tử chuỗi jquery =
- 15. So sánh hai đối tượng DateTime Thời gian Joda
- 16. (ColdFusion) So sánh hai ngày, sử dụng kết quả để xác định nội dung hiển thị
- 17. Hai chuỗi so sánh bằng cách sử dụng '=' nhưng không thành công trong 'thích' so sánh
- 18. Cách so sánh hai tệp văn bản cho cùng một văn bản chính xác bằng cách sử dụng BASH?
- 19. Django so sánh giá trị của hai đối tượng
- 20. Phương pháp phổ biến để so sánh hai đối tượng Java
- 21. Cách so sánh ngày trong xpath để chọn các nút
- 22. So sánh Integer đối tượng
- 23. Cách hiệu quả để so sánh các đối tượng StringBuilder
- 24. So sánh Xml trong C#
- 25. Làm thế nào để so sánh hai biến đối tượng trong ngôn ngữ biểu thức EL?
- 26. So sánh hai loại
- 27. So sánh hai ngày sử dụng thời gian Joda
- 28. So sánh Integer đối tượng vs int
- 29. So sánh hai tệp xml trong Mục tiêu-C
- 30. lắp ráp để so sánh hai số