12

xml と xsl を使用して左側のナビゲーション システムを作成しています。XML ドキュメントで特殊文字を使用しようとするまで、すべてが順調に進んでいました。私は使用»していますが、エラーが発生します。

理由: 未定義のエンティティ 'raquo' への参照。
エラーコード: -1072898046

どうすればこれを機能させることができますか?

4

9 に答える 9

22

非 HTML または非 XHTML ドキュメントでHTML エンティティを使用しようとしています。これらのエンティティは、ドキュメントのDocument Type Definition (DTD)で宣言されています。

エンティティ参照の数値 Unicode バージョンを使用する必要があります。たとえば、»使用する必要がある場合»

または、 XML ドキュメントの DTD で定義することもできます。

<!ENTITY entity-name "entity-value">
<!ENTITY raquo "&#187;">

それ以外の場合、ドキュメントが UTF-8 の場合、XML ドキュメントで実際の文字を直接使用できると思います。

»
于 2008-10-16T16:19:54.697 に答える
6

ファイルのドキュメント タイプを指定しましたか?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

指定を忘れると、このようなエラーが発生する可能性があると思います。

また、名前の代わりに番号で指定すると、エンティティが機能する場合もあります。

&#187; &#171; instead of &raquo; and &laquo;
于 2008-10-16T16:14:49.823 に答える
3

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: &raquo;";
 Debug.WriteLine(d.OuterXml);

次の出力が生成されます。

<foo>Here's that character: »</foo>
<foo>Here it is as an HTML entity: &amp;raquo;</foo>

最初の例からわかるように、» 文字は XML テキストでは完全に合法です。しかし、あなたはそのキャラクターを表現しようとしているとは思いません。

あなたが報告したエラー メッセージに基づいて、2 番目の例にあることを実行しようとしていると思います。文字列を表現しようとしています&raquo;。XML テキストでその文字列を表す適切な方法は、アンパサンドをエスケープすることです。したがって: &amp;raquo;.

そのため、文字列操作を使用して XML を作成する必要がある場合は、ソース データ内のアンパサンドを必ずエスケープしてください。要点を説明するつもりはありませんが、DOM を使用している場合、これは自動的に行われます。

もう1つ。元の質問では、現在「I am using »」と表示されていますが、実際に入力したのは「I am using »」である可能性が非常に高くなります。ただし、実際の投稿はそのようには見えません。マークダウンでテキストを文字通り表現する必要がある場合は、バッククォートで囲みます。そうしないと、投稿がレンダリングされるときに HTML エンティティが文字表現に変換されます。

于 2008-10-16T19:56:17.007 に答える
1

すべての HTML エンティティが XML エンティティであるとは限らないため、これは問題です。Pat が提案したように、HTML の DTD をドキュメントにインポートするか、次のいずれかを実行できます。

出現するすべての特殊文字を数値エンティティ コードに置き換えます。

&raquo; becomes &#187;

出現するすべての特殊文字を CDATA タグでラップする

<![CDATA[&raquo;]]>

ドキュメントの上部でエンティティを定義する

<!DOCTYPE ROOT_XML_ELEMENT [ <!ENTITY raquo "&#187;"> ]>
于 2008-10-16T16:21:34.350 に答える
0

» 記号を直接使用していますか、それとも » として定義していますか? ? エスケープ記号を使用している場合、セミコロンを忘れていませんか?

于 2008-10-16T16:02:49.113 に答える
0

私はそのような情報をたくさんグーグルで検索していることに気付いたので、簡単に検索できるようにするために、自分のサイトにマトリックスを投稿することにしました。

http://martinkool.com/characters

使用 &#...; まさに形。

于 2008-10-27T21:37:50.143 に答える
0

ジョー

Unicode バージョンを使用すると、正方形が表示されます。

エンティティ デカルレーションを xml doc に入れると、「DTD の外側に DTD 宣言を含めることはできません」というメッセージが表示されます。エラー。これは想定内かと思います。

'' を使用して dtd を外部に含めると、何の効果もないようです。

これはおそらくサーバーの問題ではないかと思います。これをローカルで開発し、Baby Web Server を使用しています。

于 2008-10-16T17:35:02.453 に答える
0

HTML エンティティを、任意の XML および HTML で適切な&raquo;数値参照に置き換えるだけです。&#187;

于 2008-10-17T14:56:09.403 に答える
0

&raquo;出力ドキュメントに数値参照ではなく名前付き HTML エンティティを含める場合は、次の要素をスタイルシートに追加します ( XSLT2.0 のみ)。

<xsl:output use-character-maps="raquo.ent"/>
<xsl:character-map name="raquo.ent">
    <xsl:output-character character="&#187;" string="&amp;raquo;"/>
</xsl:character-map>
于 2010-10-05T13:17:44.947 に答える