0

コードの関連部分:

<xsl:variable name="apos">'</xsl:variable>
<xsl:variable name="and" select='"&#039;"' />

<xsl:value-of select="translate(products_name/node(),$and,$apos)"/>

これは単純なことであり、上記のコードは機能するはずですが、出力にはまったく影響しないと思います。

(名前はアンパサンド内で開始できず、アポストロフィだけを使用するとコンパイルエラーが発生するため、変数を使用しました。)

コードをテストして、文字列を使用して翻訳が機能し、エラーがないことを確認しました。

どんな助けでも大歓迎です。

4

2 に答える 2

2

あなたは正しい方向に進んでいますが、まだそこにはありません。問題は、XSL自体がXMLを使用して記述されている言語であるということです。すべてのXML言語について、パーサーはXMLエンティティを自動的にデコードします。XSLTエンジンはその後にのみ提供されます。

'その結果、XSLTエンジンは、あなたが書いたかどうかを区別することも、区別することもできません&#039;。それは同じです。あなたの問題については、これには2つの効果があります。

  1. アポストロフィを含む変数を使用する必要があります。これは、アポストロフィ自体が、関数を含む可能性のある式の文字列リテラル用に予約されているためです。の場合でも<xsl:value-of select="translate(products_name/node(),$and,'&#039;')"/>、XMLパーサーはエンティティをアポストロフィに変換します。<xsl:value-of select="translate(products_name/node(),$and,''')"/>

  2. 検索する文字列で使用されているアンパサンドをエスケープする必要があります。XSLエンジンの場合、変数「and」には値が含まれます'。つまり、アポストロフィをアポストロフィに置き換えます。

実用的な解決策:

<xsl:variable name="apos">'</xsl:variable>
<xsl:value-of select='translate(text(), "&amp;#039;", $apos)'/>
于 2011-07-11T14:16:09.513 に答える
1

&apos;技術的には、&#39;との間でXMLに違いはありません&#x27;。これらは、まったく同じものを表すさまざまな方法です。したがって、そのtranslate呼び出しは何も実行しないはずです。

それは、変換方法、その出力がどこにあるか(属性値または要素?)、および出力がテキストにシリアル化される方法によって異なりますが、問題はXSLTにありません。

于 2011-07-11T14:16:54.363 に答える