65

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

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

これはXsltParseErrorを返します

4

11 に答える 11

123

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

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

または、ローカル DTD で   を記述できます。

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

または単に&#160;代わりに使用する&nbsp;

于 2008-08-28T09:02:13.060 に答える
24

次のように、 aku の回答の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">します。<!DOCTYPE ... <!ENTITY ...あなたのxsl:output設定で。

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

于 2011-09-30T17:36:43.117 に答える
15

xslt 内から html エンティティを使用するもう 1 つの可能性は次のとおりです。

<xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>
于 2008-08-28T09:10:04.133 に答える
6

これはXsltParseErrorを返します

はい、その理由&nbsp;は、HTML のように XML や XSLT で事前定義されたエンティティではないからです。

&nbsp;次を表すユニコード文字を使用できます。&#160;

于 2008-08-28T09:04:39.700 に答える
6

デフォルトでは、XSLT は 、 、 、 、 の 5 つの基本エンティティのみltgt処理aposquotますamp他のすべては@Akuメンションとして定義する必要があります。

于 2008-08-28T09:13:45.090 に答える
5

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

于 2008-08-28T12:59:00.603 に答える
1

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

を使用<xsl:text> </xsl:text>すると問題が解決しました。しかし<xsl:text>#x20;</xsl:text>、うまくいくかもしれません。

于 2012-01-24T20:03:28.800 に答える
0

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

于 2012-05-25T08:44:31.127 に答える
0

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

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

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

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

于 2013-01-27T01:41:34.277 に答える
0

情報をくれてありがとう。Dynamicweb CMSのテンプレートで XSLT 変換を行っていたときに何がうまくいったかに基づいて、短いブログ投稿を書きました。

ブログ投稿はこちら: How to add entities to XSLT templates .

/ステン・ウーガード

于 2012-01-18T13:05:24.493 に答える
-3

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

于 2011-07-02T21:27:32.370 に答える