Я просто хочу знать, можно ли использовать регулярные выражения в атрибуте 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$') в атрибуте match элемента xsl:template, он получает сообщение об ошибке. Можно ли использовать регулярные выражения в атрибуте match?
Большое спасибо
В XSLT 1.0 (и 2.0 тоже) для вашего примера (это не регулярное выражение):
<xsl:template match="*[contains(name(), 'line')]">
<xsl:value-of select="."/>
</xsl:template>
и для достижения соответствия конца строки:
<xsl:template match="*[contains(concat(name(), '
'), 'line
')]">
<xsl:value-of select="."/>
</xsl:template>
В XSLT 2.0 вы можете, конечно, использовать функцию matches() вместо contains().