web-dev-qa-db-ja.com

挿入方法  XSLTで

挿入する方法

 

XSLTスタイルシートに、このエラーが表示され続けます。

XML解析エラー:未定義のエンティティ

基本的には、XSLTテンプレートにスペースを区切らない文字が必要です。

198
JL.

代わりにエンティティコード を使用してください。

 はHTMLの「文字エンティティ参照」です。 XMLには非分割スペース用の名前付きエンティティがないため、コード を使用します。

WikipediaにはXMLエンティティとHTMLエンティティのリストが含まれています であり、XMLには5つの "定義済みエンティティ"しかありませんが、HTMLには200以上あります。 XSLでスペース( )を作成します これには優れた答えがあります。

323
brabster

&#160;は本当にうまく機能します。ただし、ANSIエンコーディングではこれらの奇妙な文字の1つが表示されます。 <xsl:text>が私にとって最もうまくいきました。

<xsl:text> </xsl:text>
31
Saroj

これを行うこともできます:

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

これを使って

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

編集:Downvotersは、おそらくこれが最初に機能することを検証する必要があります(それが機能し、問題に対する最も一般的な解決策です)。

20
jagprinderdeep

このエンティティの定義をファイルの先頭に追加することもできます(xml宣言の下)。

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

また、Ntilde、Aacuteなどのエンティティを追加できます。

13
victor hugo

victor hugo's answer に加えて、次のように、XSLTファイルで有効なすべての既知の文字参照を取得できます。

<!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>&amp; &nbsp; &ndash;</xsl:text>

<xsl:text disable-output-escaping="yes"> oneと比較した場合、このアプローチの結果には特定の違いもあります。後者は、&nbsp;を含むあらゆる種類の出力に対して<xsl:output method="text">などの文字列リテラルを生成します。これは、意図したものとは異なる場合があります... <!DOCTYPE ... <!ENTITY ...を介したXSLTテンプレートでは、xsl:output設定と一貫した出力が常に生成されます。

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

5
Sergey Ushakov

XSLT スタイルシートは整形式のXMLである必要があります。 "&nbsp;"5つの定義済みXMLエンティティ のいずれでもないため、スタイルシートに直接含めることはできません。したがって、ソリューション"&#160;"に戻ることは、使用すべき"&nbsp;"の完全な置き換えです。

例:

<xsl:value-of select="$txtFName"/>&#160;<xsl:value-of select="$txtLName"/>
2
Adil

以下を(disable-output-escaping!なしで)使用すると、単一の改行なしスペースが得られます。

<xsl:text>&#160;</xsl:text>

2
Shaam

以下も使用できます。

<xsl:value-of select="'&amp;nbsp'"/>

&の後のアンプを覚えておいてください。エラーメッセージが表示されます。

0
Mattia Vio

HTMLテーブルの空のセルに境界線を表示しようとしていました。空のセルで改行しないスペースを使用する私の古いトリックは、xsltからは機能しませんでした。同じ効果で改行を使用しました。改行しないスペースを使用しようとした場合に備えて、セルの境界線をオンにするために「空の」テーブルセルにコンテンツを提供するためにこれに言及します。

<br/>
0
B H

使用してみてください

<xsl:text>&#160;</xsl:text>

ただし、使用しているXSLTプロセッサによって異なります。XSLT仕様では、XSLTプロセッサを「&nbsp;」に変換する必要はありません。

0
Viacheslav