0

我有以下 XML 片段:

<figure customer="ABC DEF">
    <image customer="ABC"/>
    <image customer="XYZ"/>
</figure>

我想检查图形元素的客户属性是否包含图像元素的客户属性。

<xsl:if test="contains(@customer, image/@customer)">
    ...
</xsl:if>

我收到一条错误消息:

不允许将多个项目的序列作为 contains 的第二个参数

需要注意的是,我无法提前告知客户属性的值,因此这里不能使用 xsl:choose。

不使用 xsl:for-each 是否可以解决这个问题?

4

1 回答 1

2

在 XSLT 2.0 中,您可以使用:

test="image/@customer/contains(../../@customer, .) = true()"

如果其中任何一个为真,您将得到一个true()结果。实际上,这导致我建议:

test="some $cust in image/@customer satisfies contains(@customer, $cust)"

但这不会解决客户字符串是另一个客户字符串的子集的情况。

因此,也许这是最好的:

test="tokenize(@customer,'\s+') = image/@customer"

...因为这将进行逐个字符串的比较,并为您提供true()图形属性的任何标记化值是否等于图像属性之一。

于 2013-10-01T14:47:50.197 回答