Obtenir l'élément parent après avoir utilisé la méthode find (xml.programme etree.ElementTree)
je travaille avec un énorme fichier xml et j'essaie d'extraire des informations à partir de différents éléments.
import xml.etree.ElementTree as ET
tree = ET.parse('t.xml')
root = tree.getroot()
pour trouver les éléments j'utilise la méthode find:
elm = root.find('.//Element[@elmid="1234"]')
j'en extraire des informations et en plus j'ai besoin d'informations de l'élément parent. Mais elm.find('..')
retourne seulement None
comme documenté ici:
https://docs.python.org/3/library/xml.etree.elementtree.html
maintenant j'utilise le folding:
prt = root.find('.//Element[@elmid="1234"]/..')
elm = prt.find('/Element[@elmid="1234"]')
cela me semble un peu contre nature, mais ça marche.
connaissez-vous une meilleure façon de le faire?
Savez-vous pourquoi seulement None
est retourné?
1 réponses
L'API xml.etree
ne supporte Qu'une version limitée de XPath. Le xml.etree
docs pour l'expression ..
XPath état:
sélectionne l'élément parent. ne renvoie aucun si le chemin tente de rejoindre les ancêtres de l'élément start (l'élément find a été appelé sur.)
obtenir directement l'élément parent est Non pris en charge dans le xml.etree
API . Je recommande donc d'utiliser lxml
, où vous pouvez simplement utiliser getparent()
pour obtenir l'élément parent:
elm = root.find('.//Element[@elmid="1234"]')
elm.getparent()
lxml
a aussi un XPath 1.0 implementation , donc elem.xpath('..')
fonctionnerait aussi.