IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linq Discussion :

[Linq To XML] XmlParserException


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut [Linq To XML] XmlParserException
    Bonjour à tous,

    J'ai un petit soucis concernant l'utilisation de Linq, lors du parsing de mon fichier j'ai l'exception XmlParseException suivante :

    Référence à une entité non déclarée, 'eacute'. Ligne 18, position 13.
    Ceci vient des caractères accentués qui sont en hml "é"....

    Pourtant la DTD défini bien ces caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <!ENTITY eacute  "é" ><!-- small e, acute accent -->
    Et la DTD est bien inclus dans la définition du XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <!DOCTYPE dblp SYSTEM "dblp.dtd">
    Pour informations, le fichier XML et la dtp sont récupérable sur ce site :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.informatik.uni-trier.de/~ley/db/
    (le fichier xml fait 770 mo).


    Merci d'avance,
    NeoKript

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Si tu utilises un XMLReader, ça doit passer:
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var xmlReaderSettings = new XmlReaderSettings
                {
                    DtdProcessing = DtdProcessing.Parse,
                    XmlResolver = new XmlUrlResolver(),
                    ConformanceLevel = ConformanceLevel.Auto,
                };
     
     
                var xml = XDocument.Load(XmlReader.Create(@"d:\dblp.xml", xmlReaderSettings));
    A noter qu'ici je charge tout le fichier XML de 700MB, ce que je ne conseille pas du tout (bien au contraire) mais c'est pour l'exemple.

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Salut, et merci pour ta réponse,

    Le reader semble fonctionner mais comme tu le mentionnais dans ton message ce n'est pas conseiller de tout chargé ... comme prévu j'ai une Exception de type OutOfMemory !

    N'y a t'il pas un moyen pour dire de lire ligne par ligne ou noeuds par noeud afin qu'il ne prenne pas 2Go en mémoire ? (Pourquoi le XMLDocument n'utilise pas le Reade avec Reader.ReadLine() ... )

    Merci d'avance

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Pour informations j'ai trouvé ceci qui fonctionne très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    class XMLParser
        {
            private String FileName;
            public XMLParser(String FileName)
            {
                this.FileName = FileName;
            }
     
            IEnumerable<XElement> StreamElements(string ElementName)
            {
                XmlReaderSettings Setting = new XmlReaderSettings { DtdProcessing = System.Xml.DtdProcessing.Parse, XmlResolver = new XmlUrlResolver(), ConformanceLevel = System.Xml.ConformanceLevel.Auto };
                using (XmlReader Reader = XmlReader.Create(this.FileName, Setting))
                {
                    Reader.MoveToContent();
                    while (Reader.Read())
                    {
                        if ((Reader.NodeType == XmlNodeType.Element) && (Reader.Name == ElementName))
                        {
                            XElement element = (XElement)XElement.ReadFrom(Reader);
                            yield return element;
                        }
                    }
                    Reader.Close();
                }
            }
            public void Parse()
            {
                var Query = from c in this.StreamElements("book")
                            select new Book
                            {
                                Title = c.Element("title").Value,
                                Year = Convert.ToInt32(c.Element("year").Value)
                            };
                foreach (Book Book in Query)
                {
                    Console.WriteLine(Book.Title);
                    Console.WriteLine(Book.Year);
                    Console.WriteLine("------------------");
                }
     
            }
     
        }
    Sujet clos du coup ! Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Linq to Xml] Probleme de requete
    Par Gregory.M dans le forum Linq
    Réponses: 6
    Dernier message: 27/05/2008, 08h54
  2. [LINQ to XML] Connexion à un fichier xml
    Par Gregory.M dans le forum Linq
    Réponses: 5
    Dernier message: 25/05/2008, 11h32
  3. [Linq To XML] Modifier l'objet, le xml ?
    Par Ticoche dans le forum Framework .NET
    Réponses: 13
    Dernier message: 28/04/2008, 11h12
  4. Réponses: 7
    Dernier message: 10/02/2008, 11h56
  5. Réponses: 1
    Dernier message: 30/05/2007, 20h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo