Регулярные выражения в xsl:атрибут Match шаблона

Я просто хочу знать, можно ли использовать регулярные выражения в на xsl:template элемент. Например, предположим, что у меня есть следующий XML-документ:

<greeting>
    <aaa>Hello</aaa>
    <bbb>Good</bbb>
    <ccc>Excellent</ccc>
    <dddline>Line</dddline>
</greeting>

теперь XSLT для преобразования вышеуказанного документа:

<xsl:stylesheet>

    <xsl:template match="/">
        <xsl:apply-templates select="*"/>
    </xsl:template>

    <xsl:template match="matches(node-name(*),'line')">
        <xsl:value-of select="."/>
    </xsl:template>

</xsl:stylesheet>

когда я пытаюсь использовать синтаксис matches(node-name(*),'line$') на на xsl:template элемент, он получает сообщение об ошибке. Могу ли я использовать регулярные выражения в ?

спасибо

2 ответов


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


в XSLT 1.0 (и 2.0 тоже), для вашего примера (это не регулярное выражение, хотя):

<xsl:template match="*[contains(name(), 'line')]">
  <xsl:value-of select="."/>
</xsl:template>

и для достижения соответствия конца строки:

<xsl:template match="*[contains(concat(name(), '&#xA;'), 'line&#xA;')]">
  <xsl:value-of select="."/>
</xsl:template>

в XSLT 2.0 вы можете, конечно, использовать