Регулярные выражения в 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(), '
'), 'line
')]">
<xsl:value-of select="."/>
</xsl:template>
в XSLT 2.0 вы можете, конечно, использовать