D'accord, cela commence à me rendre un peu fou. J'ai essayé plusieurs bibliothèques xml/xpath pour Python, et je n'arrive pas à trouver un moyen simple d'obtenir un élément "title" de stinkin.Python xpath ne fonctionne pas?
La dernière tentative ressemble à ceci (en utilisant Amara):
def view(req, url):
req.content_type = 'text/plain'
doc = amara.parse(urlopen(url))
for node in doc.xml_xpath('//title'):
req.write(str(node)+'\n')
Mais qui imprime rien. Mon XML ressemble à ceci: http://programanddesign.com/feed/atom/
Si j'essaie //*
au lieu de //title
il retourne tout comme prévu. Je sais que le XML a title
là-dedans, alors quel est le problème? Est-ce l'espace de noms ou quelque chose? Si oui, comment puis-je le réparer?
peut sembler ne pas le faire fonctionner sans préfixe, mais cela fonctionne:
def view(req, url):
req.content_type = 'text/plain'
doc = amara.parse(url, prefixes={'atom': 'http://www.w3.org/2005/Atom'})
req.write(str(doc.xml_xpath('//atom:title')))
Vous pouvez vous débarrasser de l'espace de noms en demandant à celui qui génère le code XML de s'en débarrasser. Sinon, vous devez vous en occuper. Cela peut être fait en éditant le fichier, mais encore une fois, vous pouvez gérer tout le fichier avec des regexps, ou de simples "trouvailles" en Python ... Mais la façon robuste de gérer XML est avec un analyseur XML. Y compris les espaces de noms. –
Sur une note de côté, cette question se classe déjà sur la page 1 sur google pour la requête "amara get root node" ... en moins d'une heure, sheesh – mpen