J'ai un problème avec la récupération des informations d'un arbre XML.Python et libxml2: comment itérer dans les noeuds xml avec XPATH
Mon XML a cette forme:
<?xml version="1.0"?>
<records xmlns="http://www.mysyte.com/foo">
<record>
<id>first</id>
<name>john</name>
<papers>
<paper>john_1</paper>
<paper>john_2</paper>
</papers>
</record>
<record>
<id>second</id>
<name>mike</name>
<papers>
<paper>mike_a</paper>
<paper>mike_b</paper>
</papers>
</record>
<record>
<id>third</id>
<name>albert</name>
<papers>
<paper>paper of al</paper>
<paper>other paper</paper>
</papers>
</record>
</records>
Ce que je veux faire est d'extraire tuples de données telles que le suivi:
[{'code': 'first', 'name': 'john'},
{'code': 'second', 'name': 'mike'},
{'code': 'third', 'name': 'albert'}]
Maintenant, je l'ai écrit ce code python:
try:
doc = libxml2.parseDoc(xml)
except (libxml2.parserError, TypeError):
print "Problems loading XML"
ctxt = doc.xpathNewContext()
ctxt.xpathRegisterNs("pre", "http://www.mysyte.com/foo")
record_nodes = ctxt.xpathEval('/pre:records/pre:record')
for record_node in record_nodes:
id = record_node.xpathEval('id')[0].content
name = record_node.xpathEval('name')[0].content
ret_list.append({'code': id, 'name': name})
Mon problème est que je n'ai aucun résultat et j'ai l'impression de faire quelque chose de mal avec le XPATH w Quand je itére sur les noeuds.
J'ai aussi essayé avec ces XPath pour l'identifiant et le nom:
/id
/name
/record/id
/record/name
/pre:id
/pre:name
et ainsi de suite, mais avec un résultat (BTW si j'utilise le préfixe dans les requêtes sous-je une erreur).
Une idée?
Aucun commentaire sur ce produit? C'est en effet un moyen de "le faire directement dans libxml2". – mzjn
Désolé! J'ai oublié de signer cette réponse comme la meilleure! Cela fonctionne réellement comme je le veux. Merci! –