2009-03-31 173 views
3

C#のオブジェクトXPathDocumentにxmlドキュメントをロードしようとしています。 私のXML文書は、この行が含ま: TRESdégagée+ RADE をパーサが到着したとき、それは私に、このエラーを与える: 「エンティティ名を解析中にエラーが発生しました」 私は、文字「E」の通常の原因であることを知っています。誰も私がこのエラーを回避する方法を知っていますか?私の考えは、XMLドキュメントにエンティティ宣言を挿入し、エンティティですべての特殊文字を置き換えた後です...しかし、それは長く、それが動作しているかわかりません。他にもアイデアはありますか?簡単ですか? ありがとうEntityNameの解析中にエラーが発生しました

+1

あなたがロードを実行するために使用するコードを示している場合それは役立つだろう。 – AnthonyWJones

答えて

6

これを投稿しようとしていて、その後サーバーがダウンしました。私はこの問題は、デフォルトでXPathDocumentが提供するファイルの内容を解析するためにXmlTextReaderを使用するという事実の範囲内にあることを考える

と、このXmlTextReaderExpandEntitiesEntityHandling設定を使用しています。私は、メモリからそれを正しく書き換えられたと思います。

つまり、デフォルト設定を使用すると、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でエンコードされていますが、デフォルトのエンコードで読み込んでいると思います。

もっと詳細な回答を得るために、質問を詳しくお試しください。