置換関数を使用して正規表現の一致と置換を行う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>
置換はXSLT1.0では無効です。 「translate()」がありますが、これは機能する可能性がありますが、replace()はXSLT 2であり、MS .NETXMLコードベースの一部ではありません。ただし、サードパーティのXMLライブラリで入手できます。
置換を行うために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')"/>
単純な文字列置換の場合、変換関数(xslt 1.0で使用可能)は問題なく機能しました。
数値のスペースを取り除くために使用しました。
次のように、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