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

Python Discussion :

XML Etree.parse avec DTD


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 19
    Par défaut XML Etree.parse avec DTD
    Bonjour à tous,

    Débutant en python que je connais depuis longtemps mais c'est mon premier projet(petit).
    J'ai besoin de comparer des XML venant d'Epic editor(avec DTD) avec de multiple fichier, principalement des xls.

    j'arrive à tout faire marcher avec Etree et Openpyxl, extraire mes textes, les attribut des balises et comparer avec les données Excel.

    le seul problème pour l'instant est que quand je parse mon XML la fonction etree.parse plante avec la balise
    <!DOCTYPE madoc PUBLIC "-//MADTD//EN" >

    si j’enlève cette balise de mon xml tout fonctionne. et la DTD m'est inaccessible.

    J'envisage de sauvegarder mon xml temporairement sans cette balise pour faire mon traitement mais c'est pas 'propre'.
    j'utilise peut être pas la bonne méthode ?

    Je suis sous Windows10, Python 3.6

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    import xml.etree.ElementTree as etree 
    tree = etree.parse("C:/Users/....test.xml")
    root = tree.getroot()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Salut,

    Citation Envoyé par tsm33 Voir le message
    j'utilise peut être pas la bonne méthode ?
    La validation d'un XML contre un DTD n'a jamais été supportée par xml.etree.ElementTree. Et si cela n'a pas été rajouté récemment (j'ai rien trouvé mais j'ai peut être mal regardé), il vous faut utiliser une bibliothèque externe comme lxml.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 19
    Par défaut
    Bonjour,

    Effectivement, je n'ai pas besoin de parser mon xml vu qu'il a été fait avec un DTD. j'ai juste besoin de le lire (pour l'instant )

    Le charge lxml revient dire quoi.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Citation Envoyé par tsm33 Voir le message
    Effectivement, je n'ai pas besoin de parser mon xml vu qu'il a été fait avec un DTD. j'ai juste besoin de le lire (pour l'instant )
    Si vous mettez un "<!DOCTYPE" standard comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
       "http://www.w3.org/TR/html4/frameset.dtd">
    çà fonctionne...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 19
    Par défaut
    Oui, cela fonctionne.

    dans mon Doctype, je n'ai pas le path de la DTD.

    si je supprime le path en fermant la balise juste aprés EN je n'ai pas non plus la même erreur.

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" > donne comme erreur sous IDE Wingware :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Fichier "c:\Users\jejeutil1\AppData\Local\Programs\Python\Python36\Lib\xml\etree\ElementTree.py", ligne 101, dans <module>
      from . import ElementPath
     
    builtins.ImportError: cannot import name 'ElementPath'
    et avec mon Doctype <!DOCTYPE madoc PUBLIC "-//MADTD.....//EN" > j'ai comme erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Fichier "c:\Users\jejeutil1\AppData\Local\Programs\Python\Python36\Lib\xml\etree\ElementTree.py", ligne 597, dans parse
      self._root = parser._parse_whole(source)
     
    xml.etree.ElementTree.ParseError: syntax error: line 2, column 78

Discussions similaires

  1. [XSLT] Include de fichiers XML et parsing avec du XSL
    Par ElSegador66 dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 25/10/2009, 10h19
  2. [JDOM] Validation fichier XML avec DTD grace à JDOM ?
    Par ederf dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 20/04/2009, 12h06
  3. [JDOM] java & XML, problème de parsing avec JDOM
    Par OreillePointue dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 11/01/2008, 10h17
  4. [JDOM] Générer XMl avec DTD
    Par ypicman dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 29/05/2006, 16h26
  5. [SAX] Parser XML et validation avec dtd
    Par arno00020 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 22/11/2005, 17h30

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