假设存在允许使用 XSLT 来指定 XML 消息上的某个谓词的软件系统。具体来说:将输入文档转换为以下形式的输出文档:(<predicate>true</predicate>或<predicate>false</predicate>)。
对于一些简单的情况(如message containsXPath),这相当简单,但我现在需要为以下内容编写一个 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 中是完全不可能的?