C#のオブジェクトXPathDocumentにxmlドキュメントをロードしようとしています。 私のXML文書は、この行が含ま: TRESdégagée+ RADE をパーサが到着したとき、それは私に、このエラーを与える: 「エンティティ名を解析中にエラーが発生しました」 私は、文字「E」の通常の原因であることを知っています。誰も私がこのエラーを回避する方法を知っていますか?私の考えは、XMLドキュメントにエンティティ宣言を挿入し、エンティティですべての特殊文字を置き換えた後です...しかし、それは長く、それが動作しているかわかりません。他にもアイデアはありますか?簡単ですか? ありがとうEntityNameの解析中にエラーが発生しました
3
A
答えて
6
これを投稿しようとしていて、その後サーバーがダウンしました。私はこの問題は、デフォルトでXPathDocument
が提供するファイルの内容を解析するためにXmlTextReader
を使用するという事実の範囲内にあることを考える
と、このXmlTextReader
はExpandEntities
のEntityHandling
設定を使用しています。私は、メモリからそれを正しく書き換えられたと思います。
つまり、デフォルト設定を使用すると、XmlTextReader
は入力XMLを検証し、すべてのエンティティを解決しようとします。より良い方法は、(私は常にそれを手動で行う)を完全に制御を取ることによって、手動でこれを行うことです。
string myXMLFile = "SomeFile.xml";
string fileContent = LoadXML(myXMLFile);
private string LoadXML(string xml)
{
XPathDocument xDoc;
XmlReaderSettings xrs = new XmlReaderSettings();
// The following line does the "magic".
xrs.CheckCharacters = false;
using (XmlReader xr = XmlReader.Create(xml, xrs))
{
xDoc = new XPathDocument(xr);
}
if (xDoc != null)
{
XPathNavigator xNav = xDoc.CreateNavigator();
return xNav.OuterXml;
}
else
// Unable to load file
return null;
}
4
これは通常、ファイルの読み取りに使用されたエンコーディングと実際にエンコードされたファイルの不一致が原因です。
ファイルはUTF-8でエンコードされていますが、デフォルトのエンコードで読み込んでいると思います。
もっと詳細な回答を得るために、質問を詳しくお試しください。
あなたがロードを実行するために使用するコードを示している場合それは役立つだろう。 – AnthonyWJones