假設存在一個軟件系統,該系統可以使用XSLT在XML消息中指定某個謂詞。具體而言:將輸入文檔轉換爲以下格式的輸出文檔:<predicate>true</predicate>
(或<predicate>false</predicate>
)。如何使用XSLT比較(部分)使用XSLT的XML文檔的子樹,並根據比較結果作爲單個標籤返回布爾值?
對於一些簡單的情況下(如消息包含XPath
),這是相當瑣碎,但我現在需要寫一個XSLT進行類似如下:
<change>
<!-- state before change -->
<item>
<name>
<first>...</first>
<last>...</last>
</name>
<something>
...
</something>
</item>
<!-- state after change -->
<item>
<name>
<first>...</first>
<last>...</last>
</name>
<something>
...
</something>
</item>
</change>
而且我想返回<predicate>true</predicate>
了一個突變的定義,如果:
- 的之前或狀態(或兩者)後實際上包含
something
數據的子樹(因爲這部分是可選的),所以基本上change/item[1]/something | change/item[2]/something
,和 - 兩個都有任何
something
刪除數據的之前和之後的狀態彼此不完全相同。
第二部分可以是像以下僞代碼:$before
變量是change/item[1]/something
與任何現有的子樹something
從它移除,$after
變量是change/item[2]/something
與任何現有的子樹something
從它移除,然後也許類似not(deep-equal($before,$after))
.. 。?
任何人在這裏都有任何想法如何使用XSLT 2.0來做到這一點,因爲我懷疑這在XSLT 1.0中是完全不可能的?