2009-07-01 11 views
12

XSLT変換を記述しています。置換関数を使用して正規表現のマッチングと置き換えを行いたいと考えています。XSLT置換関数が見つかりません

ただし、Visual Studio 2008のは

があることを報告し '(置き換え)は、' 未知のXSLT関数です。

コード自体のビットは次のとおりです。

<xsl:otherwise> 
    <td style="border: solid 1px black; background-color:#00CC66;"> 
      <xsl:variable name="FeatureInfo" select="Text" /> 
       <xsl:value-of select="replace($FeatureInfo,'Feature=','TESTING')"/> 
    </td> 
</xsl:otherwise> 

は私が間違っているのはありますか?

感謝:)

編集:私はXSLTのこのバージョンを使用していますが、それが問題であるのVisual Studioのバージョンであるように見える ...私は回避策を見つけようとする必要があります。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

答えて

30

replace関数は、XSLTバージョン2.0でのみ使用でき、バージョン1.0ではなく、which is what Visual Studio usesです。 version="2.0"を指定したからといって、Visual Studioがサポートしているわけではありません。

Here's a template on codesling that implements string-replace in XSLT 1.0。あなたはそれを使うことができるはずですが、その効率を保証することはできません。 (上記のリンクからの引用)

<xsl:template name="string-replace-all"> 
    <xsl:param name="text"/> 
    <xsl:param name="replace"/> 
    <xsl:param name="by"/> 
    <xsl:choose> 
    <xsl:when test="contains($text,$replace)"> 
     <xsl:value-of select="substring-before($text,$replace)"/> 
     <xsl:value-of select="$by"/> 
     <xsl:call-template name="string-replace-all"> 
     <xsl:with-param name="text" select="substring-after($text,$replace)"/> 
     <xsl:with-param name="replace" select="$replace"/> 
     <xsl:with-param name="by" select="$by"/> 
     </xsl:call-template> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:value-of select="$text"/> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

あなたはこのようにそれを呼びたい:

<xsl:otherwise> 
    <td style="border: solid 1px black; background-color:#00CC66;"> 
    <xsl:variable name="FeatureInfo" select="Text" /> 
    <xsl:call-template name="string-replace-all"> 
     <xsl:with-param name="text" select="$FeatureInfo"/> 
     <xsl:with-param name="replace" select="Feature="/> 
     <xsl:with-param name="by" select="TESTING"/> 
    </xsl:call-template> 
    </td> 
</xsl:otherwise> 
+3

でselect = "'TESTING'"のように一重引用符が必要です。 –

9

置換はXSLT 1.0では無効です。あなたは "translate()"を持っていますが、replace()はXSLT 2であり、MS .NET XMLコードベースの一部ではありません。あなたはいくつかのサードパーティ製のXMLライブラリでそれを得ることができます。

+1

私のプロジェクトで探していたものとまったく同じです。ありがとう! –

+0

パーフェクト、ありがとうございました。D – codemania23

-1

私の知る限りでは、replace()はXLST 2.0で紹介しました。あなたのドキュメントのバージョン定義は何ですか?おそらくXLST 2.0を使用するようにVS 2008を設定する必要があります(可能な場合)。

0

、単純な文字列置換(XSLT 1.0で利用可能)を変換機能について

<xsl:otherwise><td style="border: solid 1px black; background-color:#00CC66;"> <xsl:variable name="FeatureInfo" select="Text" /> <xsl:call-template name="string-replace-all">  <xsl:with-param name="text" select="$FeatureInfo"/>  <xsl:with-param name="replace" select="'Feature='"/>  <xsl:with-param name="by" select="TESTING"/> </xsl:call-template> </td></xsl:otherwise> 

Thanks 
4

を次のように=引用符の間の文字列をフィーチャーを配置している必要がありますが私のためにうまく働きました。

数値用のスペースを取り除くために使用しました。

+0

翻訳機能は単一の文字でのみ機能します。 – JLRishe

4

置き換えを行うためにC#スクリプトを埋め込むのはどうですか?

は、あなたのスタイルシートの一番下に以下を追加します。

<msxsl:script language="C#" implements-prefix="scr"> <![CDATA[ public string Replace(string stringToModify, string pattern, string replacement) { return stringToModify.Replace(pattern, replacement); } ]]> </msxsl:script>

はstylesheet要素にnamespace属性を追加します。

xmlns:scr="urn:scr.this"

次にとして実装....

<xsl:value-of select="scr:Replace(description/text(), 'ABC', '123')"/> 
関連する問題