Erhalten Xpath dynamisch, mit ElementTree getpath()
Schreiben brauche ich eine dynamische Funktion, die feststellt, Elemente auf einer Teilstruktur eine ATOM-xml-durch den Aufbau dynamisch der XPath für das element.
Zu tun, die ich geschrieben habe, so etwas wie dieses:
tree = etree.parse(xmlFileUrl)
e = etree.XPathEvaluator(tree, namespaces={'def':'http://www.w3.org/2005/Atom'})
entries = e('//def:entry')
for entry in entries:
mypath = tree.getpath(entry) + "/category"
category = e(mypath)
Den code oben nicht finden "Kategorie", weil getpath() gibt einen XPath-ohne namespaces, in der Erwägung, dass die XPathEvaluator e() erfordert namespaces.
Obwohl ich weiß, dass ich verwenden können Sie den Pfad und geben Sie einen namespace im Aufruf von XPathEvaluator, ich würde gerne wissen, ob es möglich ist, getpath() Rückgabe eines "fully qualified" - Pfad, mit allen namespaces, wie dies ist praktisch, in bestimmten Fällen.
(Dies ist ein spin-off Frage von meiner früheren Frage: Python-XpathEvaluator ohne namespace)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anstatt zu versuchen zu konstruieren, die einen vollständigen Pfad von der Wurzel, können Sie XPath-Ausdruck auswerten " mit dem Eintrag mit den Basis-Knoten:
Wenn die Leistung nicht kritisch ist, können Sie den code vereinfachen, indem die
.xpath()
Methode auf Elemente eher als pre-kompilierten Ausdrücke:Grundsätzlich mit dem standard-Python-xml.etree Bibliothek, verschiedene Besuchs-Funktion erforderlich ist. Zu erreichen in diesem Bereich können Sie bauen eine modifizierte version von iter Methode wie diese:
Dann mit dieser Funktion können Sie für die iteration des Baum-von der Wurzel-Knoten:
Aus der docs http://lxml.de/xpathxslt.html#the-xpath-class:
Also die Antwort auf Ihre Frage ist, dass
getpath()
wird nicht wieder ein "fully qualified" - Pfad, da andernfalls würde es sich um ein argument an die Funktion für, die, Sie sind nur garantiert, dass Sie den xpath-Ausdruck zurückgegeben wird, finden Sie das element aus.Können Sie in der Lage zu kombinieren getpath und xpath (Xpath-Klasse), zu tun, was Sie wollen, obwohl.