XSLT 2.0 - сопоставление шаблона с Contains () - PullRequest
5 голосов
/ 18 февраля 2011

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

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

1 Ответ

9 голосов
/ 18 февраля 2011

Да, вы можете использовать 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')]
...