Ich habe eine XML-Datei zu parsen, und ich muss Elemente durch ID finden.Get etree Element mit Attribut oder Unterelement mit Attribut
Im Beispielcode, muss ich den Namen des driver
finden, aber ich weiß nicht, ob meine ID für die vehicle
, engine
oder block
ist. Ich möchte eine Lösung, die mit beliebigen XML innerhalb von vehicle
arbeiten würde (aber Existenz von driver
ist garantiert).
<road>
<vehicle id="16">
<driver>Bob Johnson</driver>
<engine id="532">
<type>V8</type>
<block id="113">
<material>Aluminium</material>
</block>
</engine>
</vehicle>
<vehicle id="452">
<driver>Dave Edwards</driver>
<engine id="212">
<type>Inline 6</type>
<block id="381">
<material>Cast Iron</material>
</block>
</engine>
</vehicle>
</road>
Was haben versucht, ich
Ich habe versucht, die Elemente durch ihre ID zu bekommen, und dann, wenn sie nicht vehicle
Tags waren, den Baum Ebene hoch, es zu finden, aber es scheint, pythons elem.find()
gibt None zurück, wenn das Ergebnis außerhalb elem
ist.
bei the docs Sehen, sie haben dieses Beispiel:
# Nodes with name='Singapore' that have a 'year' child
root.findall(".//year/..[@name='Singapore']")
Aber ich sehe nicht, wie für jeden Nachkommen, diese Arbeit zu machen, wie es zu einem decendant auf einer bestimmten Ebene entgegengesetzt.
sein kann es sich um eine persönliche Präferenz ist, aber da Sie schließlich 'lxml.etree' verwenden, ich denke,' Vorfahren-oder-selbst "sollte bevorzugt werden. Ziemlich sicher wäre es auch aus der Performance-Perspektive schneller. – alecxe