В XSLT 1.0 вы можете использовать метод, называемый Метод Оливера Беккера , что означает написание use
в этой форме
concat(
substring(Str1,1 div Cond),
substring(Str2,1 div not(Cond))
)
Итак, в вашем случае вы могли бы написать свой xsl:key
так:
<xsl:key name="item2" match="SHOPITEM" use="concat(
substring(substring-before(PRODUCT, ' SIZE.'), 1 div (contains(PRODUCT, ' SIZE.'))),
substring(PRODUCT, 1 div (not(contains(PRODUCT, ' SIZE.'))))
)" />
Считаете ли вы это читабельным, это другой вопрос.
Однако, в этом конкретном случае, для логики, которую вы пытаетесь реализовать, вы также можете написать ключ так:
<xsl:key name="item" match="SHOPITEM" use="substring-before(concat(PRODUCT, ' SIZE.'), ' SIZE.')" />
Итак, если PRODUCT
содержит SIZE.
, он найдет текст до первого вхождения. Если нет, то это будет сцепленный SIZE.
, который эффективно получит всю строку
См. Примеры в действии на http://xsltfiddle.liberty -development.net / jyRYYij