24

xmldoc の innerxml を設定しようとしていますが、例外が発生します: 宣言されていないエンティティへの参照

XmlDocument xmldoc = new XmlDocument();
string text = "Hello, I am text α   – —"
xmldoc.InnerXml = "<p>" + text + "</p>";

これは例外をスローします:

宣言されていないエンティティ 'alpha' への参照。行 2、位置 2..

この問題を解決するにはどうすればよいですか?

4

9 に答える 9

28

XML は、HTML とは異なり、エンティティ (つまり、UNICODE 文字への名前付き参照) を定義しないため、α — などは対応する文字に変換されません。代わりに数値を使用する必要があります。< のみ使用できます。と & XMLで

HTML を作成する場合は、代わりに HtmlDocument を使用してください。

于 2008-11-11T18:11:46.273 に答える
13

System.Xml.XmlConvert.Netでは、次のクラスを使用できます。

string text = XmlConvert.EncodeName("Hello &alpha;");

または、DOCTYPE宣言の角かっこで囲んで宣言を配置することにより、エンティティをローカルで宣言することもできます。次のヘッダーをxmlに追加します。

<!DOCTYPE documentElement[
<!ENTITY Alpha "&#913;">
<!ENTITY ndash "&#8211;">
<!ENTITY mdash "&#8212;">
]>

エンティティ定義については、「html文字エンティティ」でグーグルを実行してください。

于 2009-05-09T06:50:09.193 に答える
6

前の答えは正しいです。もう 1 つの方法は、HTML ドキュメントを、これらの文字エンティティが定義されている DTD にリンクすることです。これが標準の XHTML DTD 定義です。xml ファイルには、次の宣言が含まれている必要があります。

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
            "http://www.w3.org/TR/html4/strict.dtd">
于 2008-11-11T18:21:14.600 に答える
6

&Alpha を次のように置き換えてみてください

  &#913;
于 2008-11-11T18:06:32.993 に答える
1

文字列 System.Net.WebUtility.HtmlDecode(string) を使用して、HTML エンティティでエンコードされたすべての文字をその Unicode バリアントにデコードします。dot.net フレームワーク 4 から利用可能

于 2014-02-28T09:13:36.573 に答える
0

InnerText を に設定し"Hello, I am text α – —"て、XmlDocument がそれらを自動的にエスケープするようにすることもできます。おもう。

于 2008-11-11T18:24:47.697 に答える
0

私の状況では、HtmlDocument の使用は適切ではありませんでした。私たちのシステムには、xml をロードするために使用したカスタム XmlUrlResolver がありました。

//setup
public class CustomXmlResolver : XmlUrlResolver { /* ... */ }
String originalXml; //fetched xml with html entities in it

var doc = new XmlDocument();
doc.XmlResolver = new AdCastXmlResolver();

//making use of a transitional dtd
doc.LoadXml("<!DOCTYPE html SYSTEM \"xhtml1-transitional.dtd\" > " + originalXml);
于 2010-02-17T22:43:57.270 に答える
0

使い慣れた HTML エンティティ名を使用したい場合は、W3C が対応し、「文字の XML エンティティ定義」http://www.w3.org/TR/xml-entity-names/を作成しました。これは基本的に、HTML にあるものと非常によく似た名前付きエンティティのリストです。ただし、前述のように、これは XML に組み込まれておらず、これらの名前付きエンティティを使用する XML アプリケーションで明示的にサポートする必要があります。

于 2016-01-04T08:36:37.160 に答える