如何处理“<”和“>”在xslt中的正则表达式中

时间:2012-04-02 15:27:56

标签: xslt xslt-2.0

我有XML格式的字符串,<italic>a</italic>我正在使用xsl:analyze-string使用此模式提取所有斜体字:"<italic>a</italic>"。我知道我可以在斜体上使用模板匹配,但这里的要求是使用正则表达式匹配它。我正在尝试编写这样的表达式,(<italic>)[a-z]+</italic>,但XSLT处理器在开始<标记上抛出错误。

知道如何处理正则表达式中的开始和结束标记吗?

3 个答案:

答案 0 :(得分:3)

您尚未说明XML源的外观,但如果<italic>a</italic>是普通的XML元素,那么您无法使用正则表达式匹配元素的词法形式。那是因为 XSLT的输入是一个节点树,而不是一串词汇XML标记。这个概念对于理解XSLT的工作方式至关重要。

答案 1 :(得分:1)

只要<italic>a</italic>是实际字符串,就可以使用&lt;作为&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="&lt;italic>([^&lt;]+)&lt;/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然后应用正则表达式。它很棒。