xml と xsl を使用して左側のナビゲーション システムを作成しています。XML ドキュメントで特殊文字を使用しようとするまで、すべてが順調に進んでいました。私は使用»
していますが、エラーが発生します。
理由: 未定義のエンティティ 'raquo' への参照。
エラーコード: -1072898046
どうすればこれを機能させることができますか?
xml と xsl を使用して左側のナビゲーション システムを作成しています。XML ドキュメントで特殊文字を使用しようとするまで、すべてが順調に進んでいました。私は使用»
していますが、エラーが発生します。
理由: 未定義のエンティティ 'raquo' への参照。
エラーコード: -1072898046
どうすればこれを機能させることができますか?
非 HTML または非 XHTML ドキュメントでHTML エンティティを使用しようとしています。これらのエンティティは、ドキュメントのDocument Type Definition (DTD)で宣言されています。
エンティティ参照の数値 Unicode バージョンを使用する必要があります。たとえば、»
使用する必要がある場合»
または、 XML ドキュメントの DTD で定義することもできます。
<!ENTITY entity-name "entity-value">
<!ENTITY raquo "»">
それ以外の場合、ドキュメントが UTF-8 の場合、XML ドキュメントで実際の文字を直接使用できると思います。
»
ファイルのドキュメント タイプを指定しましたか?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
指定を忘れると、このようなエラーが発生する可能性があると思います。
また、名前の代わりに番号で指定すると、エンティティが機能する場合もあります。
» « instead of » and «
DTD でエンティティを宣言する必要はなく、DTD を使用する必要さえありません。おそらく、文字の Unicode 表現を使用する必要はありません。もちろん、CDATA セクションを使用する必要はありません。
必要なことは、文字列操作で XML を構築しようとするのではなく、DOM を使用して XML を構築することです。DOM がこの問題を解決してくれます。
C# では、このコード:
XmlDocument d = new XmlDocument();
d.LoadXml("<foo/>");
char c = (char)187;
d.DocumentElement.InnerText = "Here's that character: " + c;
Debug.WriteLine(d.OuterXml);
d.DocumentElement.InnerText = "Here it is as an HTML entity: »";
Debug.WriteLine(d.OuterXml);
次の出力が生成されます。
<foo>Here's that character: »</foo>
<foo>Here it is as an HTML entity: &raquo;</foo>
最初の例からわかるように、» 文字は XML テキストでは完全に合法です。しかし、あなたはそのキャラクターを表現しようとしているとは思いません。
あなたが報告したエラー メッセージに基づいて、2 番目の例にあることを実行しようとしていると思います。文字列を表現しようとしています»
。XML テキストでその文字列を表す適切な方法は、アンパサンドをエスケープすることです。したがって: &raquo;
.
そのため、文字列操作を使用して XML を作成する必要がある場合は、ソース データ内のアンパサンドを必ずエスケープしてください。要点を説明するつもりはありませんが、DOM を使用している場合、これは自動的に行われます。
もう1つ。元の質問では、現在「I am using »」と表示されていますが、実際に入力したのは「I am using »」である可能性が非常に高くなります。ただし、実際の投稿はそのようには見えません。マークダウンでテキストを文字通り表現する必要がある場合は、バッククォートで囲みます。そうしないと、投稿がレンダリングされるときに HTML エンティティが文字表現に変換されます。
すべての HTML エンティティが XML エンティティであるとは限らないため、これは問題です。Pat が提案したように、HTML の DTD をドキュメントにインポートするか、次のいずれかを実行できます。
出現するすべての特殊文字を数値エンティティ コードに置き換えます。
» becomes »
出現するすべての特殊文字を CDATA タグでラップする
<![CDATA[»]]>
ドキュメントの上部でエンティティを定義する
<!DOCTYPE ROOT_XML_ELEMENT [ <!ENTITY raquo "»"> ]>
» 記号を直接使用していますか、それとも » として定義していますか? ? エスケープ記号を使用している場合、セミコロンを忘れていませんか?
私はそのような情報をたくさんグーグルで検索していることに気付いたので、簡単に検索できるようにするために、自分のサイトにマトリックスを投稿することにしました。
http://martinkool.com/characters
使用 &#...; まさに形。
ジョー
Unicode バージョンを使用すると、正方形が表示されます。
エンティティ デカルレーションを xml doc に入れると、「DTD の外側に DTD 宣言を含めることはできません」というメッセージが表示されます。エラー。これは想定内かと思います。
'' を使用して dtd を外部に含めると、何の効果もないようです。
これはおそらくサーバーの問題ではないかと思います。これをローカルで開発し、Baby Web Server を使用しています。
HTML エンティティを、任意の XML および HTML で適切な»
数値参照に置き換えるだけです。»
»
出力ドキュメントに数値参照ではなく名前付き HTML エンティティを含める場合は、次の要素をスタイルシートに追加します ( XSLT2.0 のみ)。
<xsl:output use-character-maps="raquo.ent"/>
<xsl:character-map name="raquo.ent">
<xsl:output-character character="»" string="&raquo;"/>
</xsl:character-map>