xslt转义角括号

时间:2013-09-06 06:56:17

标签: html escaping xslt-2.0

我想用文字

替换'。\ s + \ w +'序列

这就是我所拥有的:

<xsl:value-of select="replace($fdesc,'[.][ ]+\w+','<br/>')" />

以下是我的错误:

  

文件第33行第57行出错:/Users/seth/Documents/EmausCCB/XSL/form_list.xsl:     SXXP0003:XML解析器报告的错误:与“a”关联的属性“select”的值     元素类型“null”不得包含'&lt;'字符。   无法编译样式表。检测到1个错误。

如果我这样做:

<xsl:value-of select="replace($fdesc,'[.][ ]+\w+','br')" />

我得到了预期的结果

1 个答案:

答案 0 :(得分:1)

如果你想创建一个br结果元素,你不能使用replace函数,因为它返回一个字符串而不是元素。

使用analyze-string代替,例如

<xsl:analyze-string select="$fesc" regex="[.][ ]+\w+">
  <xsl:matching-substring>
    <br/>
  </xsl:matching-substring>
  <xsl:non-matching-substring>
    <xsl:value-of select="."/>
  </xsl:non-matching-substring>
</xsl:analyze-string>

至于XML解析错误,正确的语法是<xsl:value-of select="replace($fdesc,'[.][ ]+\w+','&lt;br/&gt;')" />,但仍会返回字符串而不是元素节点。