我有XML格式的字符串,<italic>a</italic>
我正在使用xsl:analyze-string
使用此模式提取所有斜体字:"<italic>a</italic>"
。我知道我可以在斜体上使用模板匹配,但这里的要求是使用正则表达式匹配它。我正在尝试编写这样的表达式,(<italic>)[a-z]+</italic>
,但XSLT处理器在开始<
标记上抛出错误。
知道如何处理正则表达式中的开始和结束标记吗?
答案 0 :(得分:3)
您尚未说明XML源的外观,但如果<italic>a</italic>
是普通的XML元素,那么您无法使用正则表达式匹配元素的词法形式。那是因为 XSLT的输入是一个节点树,而不是一串词汇XML标记。这个概念对于理解XSLT的工作方式至关重要。
答案 1 :(得分:1)
只要<italic>a</italic>
是实际字符串,就可以使用<
作为&lt;字符。大于(&gt;)不需要转义。
示例:
示例XML输入
<test><![CDATA[<italic>a</italic>]]></test>
XSLT 2.0
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:analyze-string select="test" regex="<italic>([^<]+)</italic>">
<xsl:matching-substring>
<results>
<xsl:value-of select="regex-group(1)"/>
</results>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
XML输出:
<results>a</results>
答案 2 :(得分:0)
<italic>a</italic>
是一个普通的xml元素,如果你使用的是saxon xslt处理器,那么使用扩展函数net.sf.saxon.serialize来序列化xml然后应用正则表达式。它很棒。