1

入力XMLにタグがあります

<name>Sample " '</name>

XSLでは、このタグを次のように変換します。

<xsl:variable name="productName" select="substring($elemXPath/name,1,50)"/>
<someTag someAttr="{$productName}"/>

XSLTを実行すると、出力は次のようになります。

<someTag someAttr="Sample &quot; '"/>

でも欲しい

<someTag someAttr="Sample &quot; &apos;"/>

代わりは。xsltにはそのような場所がたくさんあるので、入力データのすべての使用を個別のエスケープテンプレートでラップしたくありません。

入力ファイルでアポストロフィをエンコードしようとしましたが、

<name>Sample &apos;</name>

入力ファイルにそれから私は得た

<someTag someAttr="Sample &amp;apos;"/>

それ以外の

<someTag someAttr="Sample &apos;"/>

私の質問は、引用符の場合と同じように、XSLTにアポストロフィをエンコードするように強制/構成する方法です。

4

2 に答える 2

2

XSLT 1.0では、このレベルへのシリアル化を制御する方法はありません

XSLT 2.0では<xsl:character-map>、次の例のように使用します

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                 version="2.0">
 <xsl:output method="xml" use-character-maps="myChars" omit-xml-declaration="yes"/>

 <xsl:character-map name="myChars">
  <xsl:output-character character="&quot;" string="&amp;quot;"/>
  <xsl:output-character character="&apos;" string="&amp;apos;"/>
 </xsl:character-map>

 <xsl:template match="/">
     <someTag someAttr="Sample &quot; &apos;"   />
 </xsl:template>
</xsl:stylesheet>

これにより、必要な結果が得られます。

<someTag someAttr="Sample &quot; &apos;"/>
于 2011-10-18T13:11:13.557 に答える
1

一般に、XSLTプロセッサがデータの2つの同等のシリアル化のどちらを選択するかは気にしないでください。データの正気な消費者は、それらを同じように扱います。そうでない場合は、コンシューマーを修正する必要があります。

ただし、実用的な理由から、XSLT 1.0はdisable-output-escapingを提供し、XSLT 2.0は文字コード表を提供するため、本当に必要な場合は、このレベルで出力を微調整できます。

于 2011-10-18T13:22:21.893 に答える