20

&記号 (例: )で区切られた変数割り当てのクエリ文字列を作成しようとしています"var1=x&var2=y&..."。この文字列を埋め込みフラッシュ ファイルに渡す予定です。

&XSLT でシンボルを表示するのに問題があります。タグを付けずに入力&すると、XSLT ドキュメントのレンダリングに問題が発生します。&amp;タグを付けずに入力すると、ドキュメントの出力は変化&amp;しません。入力し<xsl:value-of select="&" />ない<xsl:value-of select="&amp;" />とエラーが発生します。これは可能ですか?注:私も試してみ&amp;amp;ましたが成功しませんでした。

4

13 に答える 13

17

disable-output-escapingセクションと組み合わせることができますCDATA。これを試して:

<xsl:text disable-output-escaping="yes"><![CDATA[&]]></xsl:text>
于 2008-09-26T22:48:59.317 に答える
11

URIをHTMLまたはXHTMLで表現していますか?たとえば<tag attr="http://foo.bar/?key=value&amp;key2=value2&amp;..."/> 、「&amp;」は、必要なリテラルURIとは異なって見える場合でも、属性値でアンパサンドを表す正しい方法です。ブラウザは、 " &amp;"およびその他の文字エンティティ参照をデコードしてから、それらをロードするか、Flashに渡します。リテラルを埋め込むには&、HTMLまたはXHTMLに直接""を単独で使用するのは正しくありません。

また、このようなことをより明確に考えるために、個人的にはXMLについてもっと学ぶことをお勧めします。たとえば、W3C DOMをもっと使用してみてください(単なるJavascript以上のもの)。日常的に使用していなくても、DOMを学ぶことで、XMLのツリー構造を正しく理解し、属性と要素を正しくエンコードする方法を考えることができました。

于 2008-09-15T23:27:43.763 に答える
6

タグで使用disable-output-escaping="yes"するvalue-of

于 2008-09-15T23:15:04.980 に答える
4

出力として XML ファイルを生成しようとしている場合は、生成する必要があります&amp;(&それ自体では無効な XML であるため)。文字列を生成するだけの場合は、スタイルシートの出力モードをに設定する必要がありますtextxsl:stylesheet

<xsl:output method="text"/>

これにより、スタイルシートがエスケープするのを防ぎ、<xsl:value-of select="'&amp;'" />生成する必要があり&ます。

于 2008-09-16T11:14:23.847 に答える
4

他のタグ ("embed" など) の属性でより大きな URL の一部としてクエリ文字列を作成する場合、実際には & を & としてエスケープする必要がありますすべてのブラウザはあなたの意図を理解し、正しいことを行いますが、生成されたドキュメントをバリデータに渡すと、エスケープされていない & 属性値にフラグが付けられます。

于 2008-09-15T23:26:13.457 に答える
3

変換が XML ドキュメントを発行している場合、出力エスケープを無効にしないでください。出力でマークアップ文字をエスケープして、不正な形式の XML を出力しないようにする必要があります。出力を処理している XML オブジェクト (DOM など) は、テキストのエスケープを解除します。

XML オブジェクトの代わりに文字列操作を使用して出力を処理している場合は、問題があります。しかし、問題は XSLT にあるのではなく、文字列操作を使用して XML を処理するという決定にあるのです。これは、ほとんどの場合、悪いことです。

変換が HTML またはテキストを出力している場合 (そして、<xsl:output>要素に出力タイプを設定していますよね?)、それは別の話です。disable-output-escaping='yes'次に、<xsl:value-of>要素で使用するのが適切です。

ただし、いずれにしても、CDATA セクションでテキストをラップしていない限り、XSLT のテキスト ノードでマークアップ文字をエスケープする必要があります。

于 2008-10-08T00:24:42.503 に答える
1

出力エスケープを無効にするとうまくいきます...この属性はテキストに対してのみサポートされているため、テンプレートを操作することもできます。

 <xsl:variable name="replaced">

    <xsl:call-template name='app'>
      <xsl:with-param name='name'/>       
    </xsl:call-template>
  </xsl:variable>


<xsl:value-of select="$replaced" disable-output-escaping="yes"/>

---> テンプレート呼び出しを変数にラップし、disable-output-escaping="yes" を使用しました..

于 2014-06-03T09:40:44.913 に答える
0

次のように、ノードまたは文字列/テキストの値内でdisable-output-escapingを使用できることに注意してください。

<xsl:value-of select="/node/here" disable-output-escaping="yes" />

また

<xsl:value-of select="'&amp;'" disable-output-escaping="yes" />
<xsl:text disable-output-escaping="yes">Texas A&amp;M</xsl:text>

xsl:value-ofの単一引用符に注意してください。

ただし、属性にdisable-output-escapingを使用することはできません。私はそれが完全に台無しになっていることを知っています、しかし、それは物事がXSLT1.0である方法です。したがって、以下は機能しません

<xsl:value-of select="/node/here/@ttribute" disable-output-escaping="yes" />

細字で引用されているので:

したがって、コメント、処理命令、または 属性ノードの文字列値を生成するために使用されるor 要素の出力エスケープを無効にするとエラーになります。<xsl:value-of /><xsl:text />

強調鉱山。

取得元:http ://www.w3.org/TR/xslt#disable-output-escaping

于 2008-09-17T19:51:04.423 に答える
0

disable-output-escaping属性 (ブール値)を使用するのが、おそらくこれを実現する最も簡単な方法です。<xsl:value-of/>これは on だけでなく with でも使用できることに注意してください<xsl:text>。これは、特定のケースに応じて、よりクリーンになる可能性があります。

仕様の関連部分は次のとおりです。 http://www.w3.org/TR/xslt#disable-output-escaping

于 2008-09-15T23:18:52.757 に答える
-3

試してください: <xsl:value-of select="&" disable-output-escaping="yes"/>

書式が乱れていたらすみません。

于 2008-09-15T23:18:03.727 に答える