2010-01-27 4 views
3

J'ai besoin d'analyser une version d'un fichier XML comme suit.Lire des informations XML DOCTYPE avec Python

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE twReport [ 
<!ELEMENT twReport (twHead?, (twWarn | twDebug | twInfo)*, twBody, twSum?, 
       twDebug*, twFoot?, twClientInfo?)> 
<!ATTLIST twReport version CDATA "10,4"> <----- VERSION INFO HERE 

J'utilise xml.dom.minidom pour analyser un fichier XML, et je dois analyser la version du fichier XML écrit dans le DTD intégré. Puis-je utiliser xml.dom.minidom à cet effet?

  • Existe-t-il un analyseur XML python à cette fin?
+0

Que signifie "facile"? Utiliser les différents analyseurs XML en Python semble assez simple. Que pourrais-tu vouloir de plus? –

+0

Je voulais obtenir la solution la plus simple - quelque chose comme l'utilisation de xml.dom.minidom ou similaire, n'utilisant pas SAX de Python, ou une autre bibliothèque tierce. – prosseek

+0

La question dit "Je veux utiliser ... xml.dom.minidom". Votre commentaire dit "using xml.dom.minidom". De toute évidence, vous pensez que c'est plus facile. Quelle est la question? –

Répondre

2

Que diriez-vous de xmlproc de DTD api?

est ici il y a un extrait aléatoire de code que j'écrit des années et des années à faire un travail avec DTDs de Python, ce qui pourrait vous donner une idée de ce que ça fait de travailler avec cette bibliothèque:

from xml.parsers.xmlproc import dtdparser 

attr_separator = '_' 
child_separator = '_' 

dtd = dtdparser.load_dtd('schedule.dtd') 

for name, element in dtd.elems.items(): 
    for attr in element.attrlist: 
     output = '%s%s%s = ' % (name, attr_separator, attr) 
     print output 
    for child in element.get_valid_elements(element.get_start_state()): 
     output = '%s%s%s = ' % (name, child_separator, child) 
     print output 

(Pour votre information , ce fut le premier résultat lorsque searching for "python dtd parser")

+0

Cela semble plutôt bien, mais les informations de DTD contenant le numéro de version font partie du fichier XML. – prosseek

+0

De quelles informations avez-vous besoin dans ce fichier? Est-ce juste les informations de version de la DTD embarquée? Si oui, pourquoi ne pas le sortir avec une expression régulière? –

+0

Et je suppose que je devrais souligner que les parseurs 'xmlproc' fournissent une méthode' get_dtd' qui vous donnera accès à la DTD d'un fichier XML analysé. Ce qui peut ou peut ne pas être ce que vous cherchez. Tout cela est expliqué dans les documents auxquels je me suis connecté. –

0

Parce que les deux bibliothèques XML bibliothèque standard (xml.dom.minidom et xml.etree) utilisent le même analyseur (xml.parsers.expat) vous êtes limité dans la « qualité » des données XML vous pouvez avec succès analyser. Il est préférable d'utiliser les modules tiers éprouvés comme lxml ou BeautifulSoup qui sont non seulement plus résistants aux erreurs, mais qui vous donneront exactement ce que vous cherchez avec peu de problèmes.

Questions connexes