2013-10-01 23 views
0

一組字符串我有以下XML片段:如何使用contains()方法在XSLT

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

我想檢查圖形元素的客戶屬性包含的圖像元素的客戶屬性。

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

我得到一個錯誤說:

多個項目的序列不允許作爲的第二個參數包含

需要注意的是,我不能告訴是非常重要的客戶屬性的值預先提供,因此使用xsl:choose不是此處的選項。

是否有可能解決這個問題,而不使用xsl:for-each?

回答

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()如果任何人物屬性的符號化的值等於一個的圖像屬性。