Finden Sie ein Element in einem XML-Baum mit ElementTree

Ich versuche, ein bestimmtes Element in einer XML-Datei zu finden, mit ElementTree. Hier ist das XML:

<documentRoot> <?version="1.0" encoding="UTF-8" standalone="yes"?> <n:CallFinished xmlns="http://api.callfire.com/data" xmlns:n="http://api.callfire.com/notification/xsd"> <n:SubscriptionId>96763001</n:SubscriptionId> <Call id="158864460001"> <FromNumber>5129618605</FromNumber> <ToNumber>15122537666</ToNumber> <State>FINISHED</State> <ContactId>125069153001</ContactId> <Inbound>true</Inbound> <Created>2014-01-15T00:15:05Z</Created> <Modified>2014-01-15T00:15:18Z</Modified> <FinalResult>LA</FinalResult> <CallRecord id="94732950001"> <Result>LA</Result> <FinishTime>2014-01-15T00:15:15Z</FinishTime> <BilledAmount>1.0</BilledAmount> <AnswerTime>2014-01-15T00:15:06Z</AnswerTime> <Duration>9</Duration> </CallRecord> </Call> </n:CallFinished> </documentRoot> 

Ich interessiere mich für das <Created> Item. Hier ist der Code, den ich verwende:

 import xml.etree.ElementTree as ET calls_root = ET.fromstring(calls_xml) for item in calls_root.find('CallFinished/Call/Created'): print "Found you!" call_start = item.text 

Ich habe ein paar verschiedene XPath Ausdrücke ausprobiert, aber ich bin stumped – ich kann das Element nicht finden. Irgendwelche Tipps?

One Solution collect form web for “Finden Sie ein Element in einem XML-Baum mit ElementTree”

Sie referenzieren nicht auf die Namespaces, die im XML-Dokument vorhanden sind, so dass ElementTree die Elemente in diesem XPath nicht finden kann. Sie müssen ElementTree mitteilen, welche Namespaces Sie verwenden.

Folgendes soll funktionieren:

 import xml.etree.ElementTree as ET namespaces = {'n':'{http://api.callfire.com/notification/xsd}', '_':'{http://api.callfire.com/data}' } calls_root = ET.fromstring(calls_xml) for item in calls_root.find('{n}CallFinished/{_}Call/{_}Created'.format(**namespaces)): print "Found you!" call_start = item.text 

Alternativ hat LXML eine Umhüllung um ElementTree und hat gute Unterstützung für Namespaces, ohne sich um String-Formatierung zu sorgen .

  • Python xpath funktioniert nicht?
  • Scrapy und Xpath, um Daten aus Javascript-Code zu extrahieren
  • Verknüpfen von Xpath verschachtelten Text in Scrapy
  • Scrapy, das eine Nullausgabe zurückgibt, wenn ein Element aus einer Tabelle mit xpath extrahiert wird
  • Wie man mit dem Hinzufügen von Elementen und ihren Eltern mit xpath umgehen kann
  • Xpath analysiert die ganze Seite, wenn ich mich nicht an
  • Die Grenze von Element Tree auf xpath
  • Python lxml (objektivieren): Xpath Probleme
  • Python und libxml2: wie man in xml-Knoten mit XPATH iterieren kann
  • Ist es ein xpath (lxml) Bug?
  • Cant Scrape Webseite mit Python Requests Library
  • Python ist die beste Programmiersprache der Welt.