XSLT 2.0 — сопоставление шаблонов с функцией contains()

Мне интересно, можно ли написать соответствие шаблона с функцией contains().

У меня есть документ с несколькими элементами, которые нужно переименовать в общий элемент. Все нижеперечисленное необходимо переименовать в просто OP: OP1.2, OP7.3, OP2.4, OP5.6` и т. д.


person Katie    schedule 17.02.2011    source источник


Ответы (1)


Да, вы можете использовать contains() внутри фильтра предиката в критериях соответствия для элементов.

<xsl:template match="*[contains(local-name(),'OP')]>
  <OP>
    <xsl:apply-templates select="@*|node()"/>
  </OP>
</xsl:template>

Вы также можете использовать starts-with().

*[starts-with(local-name(),'OP')]

Если вы используете XSLT 2.0, вы можете использовать функцию matches(), который поддерживает шаблоны REGEX для более сложного сопоставления.

*[matches(local-name(),'^OP')]
person Mads Hansen    schedule 18.02.2011
comment
Можем ли мы предоставить несколько значений для сопоставления? например: match=*[содержит (local-name(),'OP1|OP2|OP3')] - person ; 09.11.2017
comment
@ Сишант Мишра да, можешь. Второй параметр — это шаблон регулярного выражения, поэтому, если это допустимое регулярное выражение, оно будет работать. - person Mads Hansen; 09.11.2017