我想通過XSLT比較兩個XML文件。比較應當被認爲是成功的,如果在文檔1中的特定類型的所有元件被定位在文件相同的XPath位置2XSLT:兩個文件之間的XPath比較
考慮
<entry>
<entry1>
<entry2>
<value type="1"/>
</entry2>
</entry1>
</entry>
如文獻1
的被觀察的元素是位於entry/entry1/entry2處的「值」(屬性類型= 1)。因此,在這個意義上說,以
<entry>
<entry0/>
<entry0/>
<entry1>
<entry2>
<value type="1"/>
</entry2>
</entry1>
</entry>
的比較應該被認爲是成功的,而
<entry>
<entry1>
<value type="1"/>
</entry1>
</entry>
不成功,因爲「值」(與屬性類型= 1)位於入口/取值範。也 比較結果來
<entry>
<entry1>
<entry2>
<value type="2"/>
</entry2>
</entry1>
</entry>
應當被認爲是不成功的,因爲價值的屬性的類型= 2。
我天真的試驗,以履行其在XSLT這個任務是這樣的:
<xsl:template match="value">
<xsl:if test="not(document($doc2)/.[@[email protected]])">
<xsl:text>something is missing</xsl:text>
</xsl:if>
</xsl:template>
這種做法並不成功,因爲第2文件中所需的XPath的選擇似乎不起作用。
也許你有一個想法如何解決這個問題?
馬特
如果您只需測試一些元素,最好的方法是手動編寫測試XPath,然後針對不同的文件執行它們並比較結果。否則,我不知道這個問題的簡單解決方案。 – 2011-03-10 13:41:23
我不明白你的比較。 '<值類型= 「1」/> '是從'條目><值類型= 「1」/> 非常不同'。爲什麼他們之間的比較成功? –
2011-03-10 13:45:25
好吧,不要稱之爲「比較」,而是「檢查doc1中觀察到的每個元素是否存在於doc2中相同的XPath」。我將嘗試下面的答案中提出的深入平等。 – Matt 2011-03-10 14:36:41