2011-10-27 9 views
4

私はいくつかのデータを持つノードがあります。私は私が開いたり閉じ括弧をエスケープしようとしていますXSLTを実行すると、私の人生のためにどのように出て働くことができない場合はXSLは(文字の置き換え)

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

をこれまでこれを達成するために、私はこのようなことを試みています。

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

これは私がサクソンを使用して取得していますエラーです:XSLで エラー: FORX0002:something.xmlの行728列の34のテンプレートの正規表現で文字1でエラー「(」:予想() )

おかげ

答えて

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

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

これは、どちらかのブラケットのために動作します。あなたのコードも不完全です。何がありますか?それはあなたが期待する価値を含んでいますか? xsl:value-ofの最後に>がありません。

EDIT:@ 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> 

上記は、あなたが最初に望んでいた結果を持っているでしょう。

+0

@_FailedDev:OPの問題は、文字通り文字列を第3引数として指定できないということです。あなたのソリューションは賢明な回避策ですが、正確な文字列を 'replace()'の第3引数としてどのように指定するのかという質問には答えません。 –

+0

@DimitreNovatchevあなたは正しいかもしれませんが、OPが私の答えを受け入れるならば、彼は本当に彼の質問に答えたと思うと思うでしょう。さらに、問題はreplace()の第2引数にあり、第3引数にはありません。 – FailedDev

+0

@_FailedDev:はい、答えはまだ問題を説明していないため、問題は解決しません。回避策です。私の答えは、OPが求めているものに近いと信じています。 –

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 
+0

「サクソンバグでなければならない」 - それはSaxon 9.3(HE/PE/EE)でうまく動作します。 –

+0

@DevNull:残念ながら私は仕事でサクソン9.xを持っていない、おそらく今朝家で私はサクソンとは違った何かを走らせた。 –

関連する問題