2009-03-31 7 views
3

J'essaie de charger un document XML dans un objet XPathDocument en C#. Mes documents xml incluent cette ligne: trés dégagée + rade et quand l'analyseur arrive là, il me donne cette erreur: "Une erreur est survenue lors de l'analyse EntityName" Je sais que c'est la cause normale du caractère "é". Est-ce que quelqu'un sait comment puis-je éviter cette erreur ... Mon idée est d'insérer dans le document xml une déclaration d'entités et après avoir remplacé tous les caractères spéciaux par des entités ... mais c'est long et je ne sais pas si ça marche. Avez-vous d'autres idées? Plus simple? Merci beaucoupUne erreur s'est produite lors de l'analyse EntityName

+1

Il serait utile si vous montrer le code que vous utilisez pour effectuer la charge. – AnthonyWJones

Répondre

6

Était sur le point de publier ceci et juste après que les serveurs ont baissé. Je pense que je l'ai réécrit correctement de la mémoire:

Je pense que le problème réside dans le fait que par défaut, le XPathDocument utilise un XmlTextReader pour analyser le contenu du fichier fourni et ce XmlTextReader utilise un paramètre EntityHandling de ExpandEntities . En d'autres termes, lorsque vous comptez sur les paramètres par défaut, un XmlTextReader va valider le XML d'entrée et tenter de résoudre toutes les entités. La meilleure façon est de le faire manuellement en prenant le contrôle total sur le XmlReaderSettings (je fais toujours manuellement):

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

Généralement, cela est dû à une incompatibilité entre l'encodage utilisé pour lire le fichier et les fichiers réellement encodés. En supposant que je dirais que le fichier est codé en UTF-8 mais que vous le lisez avec un encodage par défaut. Essayez de renforcer votre question avec plus de détails pour obtenir une réponse plus définitive.

Questions connexes