trouver des éléments par atsortingbut avec lxml

Je dois parsingr un fichier xml pour extraire des données. Je n’ai besoin que de certains éléments avec certains atsortingbuts, voici un exemple de document:

  
some text
some text
some text

Ici, je voudrais obtenir uniquement l’article avec le type “news”. Quelle est la manière la plus efficace et élégante de le faire avec lxml?

J’ai essayé avec la méthode find mais ce n’est pas très agréable:

 from lxml import etree f = etree.parse("myfile") root = f.getroot() articles = root.getchildren()[0] article_list = articles.findall('article') for article in article_list: if "type" in article.keys(): if article.atsortingb['type'] == 'news': content = article.find('content') content = content.text 

Vous pouvez utiliser xpath, par exemple root.xpath("//article[@type='news']")

Cette expression xpath renvoie une liste de tous les éléments

avec des atsortingbuts “type” avec la valeur “news”. Vous pouvez ensuite le parcourir pour faire ce que vous voulez, ou le passer où vous voulez.

Pour obtenir uniquement le contenu du texte, vous pouvez étendre le xpath comme suit:

 root = etree.fromssortingng("""   
some text
some text
some text
""") print root.xpath("//article[@type='news']/content/text()")

et cela produira ['some text', 'some text'] . Ou si vous vouliez simplement les éléments de contenu, ce serait "//article[@type='news']/content" – et ainsi de suite.

Juste pour référence, vous pouvez obtenir le même résultat avec findall :

 root = etree.fromssortingng("""   
some text
some text
some text
""") articles = root.find("articles") article_list = articles.findall("article[@type='news']/content") for a in article_list: print a.text