XSL替换字符()

时间:2011-10-27 14:06:08

标签: xslt

我有一个包含一些数据的节点:

<something>Blah blah (Hello World) hihi</something>

当我执行XSLt时,我试图逃避打开和关闭括号,并且在我的生活中无法解决如何实现这一点到目前为止我尝试这样的事情。

<xsl:variable name="rb">(</xsl:variable>
<xsl:message><xsl:value-of select="replace(something, $rb, concat('\\', $rb))" /</xsl:message>

这是我使用Saxon的错误:

  

在somethingx的第728行第34行的xsl:template处出错:     FORX0002:正则表达式“(”:expected())

中字符1出错

3 个答案:

答案 0 :(得分:2)

<xsl:variable name='string'>Blah blah (Hello World) hihi</xsl:variable>

<xsl:message>
  <xsl:value-of select="replace($string, '(\(|\))','\\$1')" />
</xsl:message>

这适用于任何一个括号。您的代码也不完整。什么东西?它包含您期望的价值吗?你错过了一个&gt;在xsl:value-of。

的末尾 编辑:在@Dimitre的评论之后:

<xsl:variable name="rb">(</xsl:variable>
<xsl:variable name='string'>Blah blah (Hello World) hihi</xsl:variable>

<xsl:message>
  <xsl:value-of select="replace($string, concat('\', $rb), concat('\\', $rb))" />
</xsl:message>

上面会有你最初想要的结果,虽然我认为没有理由比原来的解决方案更喜欢这个。

答案 1 :(得分:2)

适用于AltovaXML20011(XML-SPY)

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>  
 <xsl:template match="/">
  <xsl:sequence select="replace(replace(., '\(', '\\(' ), '\)', '\\)' )"/>
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档

<something>Blah blah (Hello World) hihi</something>

生成了想要的结果

Blah blah \(Hello World\) hihi

答案 2 :(得分:0)

<xsl:template match="text">
       <xsl:variable name="tex" select="' blabla ? blabl ?  abla ?  '"/>
       <xsl:element name="text">
           <xsl:value-of select="replace($tex,'\?','.')"/>
       </xsl:element>
   </xsl:template>