質問

XSLT に HTML エンティティを含める最良の方法は何ですか?

<xsl:template match="/a/node">
    <xsl:value-of select="."/>
    <xsl:text>&nbsp;</xsl:text>
</xsl:template>

これは を返します XsltParseError

役に立ちましたか?

解決

CDATAセクションを使用できます

<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>

または、ローカル DTD で &nbsp を記述することもできます。

<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]>

または単に使用してください &#160; の代わりに &nbsp;

他のヒント

の第 2 部からのアプローチを拡張することも可能です。 アクさんの答え 次のように、利用可能なすべての既知の文字参照を取得します。

<!DOCTYPE stylesheet [
  <!ENTITY % w3centities-f PUBLIC "-//W3C//ENTITIES Combined Set//EN//XML"
      "http://www.w3.org/2003/entities/2007/w3centities-f.ent">
  %w3centities-f;
]>
...
<xsl:text>&nbsp;&minus;30&deg;</xsl:text>

と比較すると結果に確実な違いがあります <xsl:text disable-output-escaping="yes"> アプローチ。後者は次のような文字列リテラルを生成します。 &nbsp; あらゆる種類の出力に対して、 <xsl:output method="text">, 、これはあなたが望むものとは異なる可能性があります...逆に、XSLT テンプレートに定義されたエンティティを取得するには、 <!DOCTYPE ... <!ENTITY ... 常に一貫した出力を生成します xsl:output 設定。

その場合、ローカル エンティティ リゾルバーを使用して、XSLT エンジンがインターネットから文字エンティティ定義を取得しないようにすることが賢明かもしれません。JAXP または明示的な Xalan-J ユーザーは、リゾルバーを正しく使用するために Xalan-J のパッチが必要な場合があります。私のブログを見てください XSLT、エンティティ、Java、Xalan... パッチのダウンロードとコメント用。

xslt 内から HTML エンティティを使用するもう 1 つの方法は次のとおりです。

<xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>

XSLT はデフォルトで 5 つの基本エンティティのみを処理します。 lt, gt, apos, quot, 、 そして amp. 。他のすべては次のように定義する必要があります @あく 言及しています。

これは を返します XsltParseError

はい、その理由は、 &nbsp; HTML の場合のように、XML または XSLT で事前定義されたエンティティではありません。

Unicode 文字を使用することもできます。 &nbsp; を意味する: &#160;

Unicode が登場した現在、名前付き文字エンティティを使用することは一般に逆効果です。そのため、エンティティの代わりに非改行スペースには Unicode 文字を使用することをお勧めします。あるいは、エンティティを使用することもできます &#160; 名前付きエンティティの代わりに。名前付きエンティティを使用すると、XML がインラインまたは外部 DTD に依存するようになります。

これらの解決策はすべて、空白スペースに Â 文字を生成することがわかりました。

使用する <xsl:text> </xsl:text> 私にとって問題は解決しました。しかし <xsl:text>#x20;</xsl:text> も機能するかもしれません。

情報をくれてありがとう。のテンプレートで XSLT 変換を行ったときにうまくいったことに基づいて短いブログ投稿を書きました。 ダイナミックウェブ CMS.

ブログ投稿はこちらです: XSLT テンプレートにエンティティを追加する方法.

/ステン・フーガード

エンティティを使用する必要があります #x160;

Aku からの DOCTYPE アプローチはうまくいきませんでした。

Windows 2003 サーバー上の MSXML 変換でうまくいったのは、

    <xsl:text disable-output-escaping="yes">&amp;#160;</xsl:text>

上記のハイブリッドのようなもの。Stackoverflow の貢献者に感謝します。

テキストタグの間には 1 つのスペース文字があれば十分です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top