web-dev-qa-db-ja.com

XSLT置換機能が見つかりません

置換関数を使用して正規表現の一致と置換を行うXSLT変換を作成しています。

ただし、Visual Studio2008では次のように報告されています

'replace()'は不明な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を使用していますが、問題があるのはVisualStudioのバージョンのようです...回避策を見つける必要があります。

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

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

これは、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>
31
Welbog

置換はXSLT1.0では無効です。 「translate()」がありますが、これは機能する可能性がありますが、replace()はXSLT 2であり、MS .NETXMLコードベースの一部ではありません。ただし、サードパーティのXMLライブラリで入手できます。

9
DigDoug

置換を行うために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>

名前空間属性をスタイルシート要素に追加します。

xmlns:scr="urn:scr.this"

次に、として実装します。

<xsl:value-of select="scr:Replace(description/text(), 'ABC', '123')"/>
6
Flippsie

単純な文字列置換の場合、変換関数(xslt 1.0で使用可能)は問題なく機能しました。

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

4
mikey

次のように、Feature =文字列を引用符の間に配置する必要があります

<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
0
Mina Samy