假设存在允许使用 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 中是完全不可能的?