2016-04-27 11 views
1

Ich habe die folgende XML-Datei:Suche XML-Inhalte in Python

Mit some help of StackOverflow, ich es geschafft, einige zu erreichen, was ich vorhatte. Jetzt möchte ich meinem Skript eine Suchfunktion hinzufügen und an diesem Teilbaum arbeiten. Zum Beispiel frage ich den Benutzer - welche ID? Er gibt AL2012-2015-088 ein. Bei der rekursiven Suche nach dieser ID in einer umfangreichen XML-Datei sollte das Skript diese ID finden und die vorhandenen Elemente drucken.

Ich habe content.find("AL2012-2015-088") verwendet, aber es wird nicht funktionieren!

+1

Was Sie Sie verwendet bedeuten tun 'content.find() '? Welche Bibliothek verwendest du und wo ist dein Python-Code? –

+0

Die Antwort auf * hir * letzte Frage zeigte auf das 'xml.etree'-Modul. –

+0

Hallo! Ich benutze ElementTree. Ich benutze es so - ids = content.find ("id") – Metahuman

Antwort

0

Ich glaube, der Befehl find wurde entwickelt, um Tags im Gegensatz zu den Text innerhalb der Tags zu finden, so dass Sie auf id finden sollten. Ich bin nicht sicher, welche Informationen Sie von der XML benötigen, aber hier ist ein Beispiel, das den Titel bekommt.

import xml.etree.ElementTree as elt 
content = elt.parse('example.xml').getroot() 

def get_id_info(inputID): 
    for child in content: 
     if child.find('id').text == inputID: 
      print child.find('title').text 

get_id_info('AL2012-2014-001') 

gibt Amazon Linux 2012.03 - AL2012-2014-001...

+0

Das scheint teilweise für mich zu arbeiten. Ich habe - \t \t für ein Kind im Baum: \t \t \t wenn child.find ('id') Text == amazon_id: \t \t \t \t print "[+]% r in% r gefunden!". % (amazon_id, xmlfile) \t \t sonst: \t \t \t drucken "[!]% r nicht gefunden in% r!" % (amazon_id, xmlfile) amazon_id, xmlfile werden von sys.argv übernommen. Dies gibt - 'AL2012-2014-001' in 'xml.xml' gefunden! 'AL2012-2014-001' in 'xml.xml' gefunden! 'AL2012-2014-001' nicht in 'xml.xml' gefunden! Wie kann ich das korrigieren? – Metahuman

+0

Ich glaube ich weiß was passiert. Die XML-Datei, die ich habe, hat 100 Bäume und daher läuft diese 100 Mal! Wie kann ich das beheben? – Metahuman

+0

Dies scheint eher eine Frage zu Ihren Daten als die Programmierung zu sein. Sieht so aus, als ob "AL2012-2014-001" in Ihrer XML-Datei mehrfach auftaucht. Sie müssen entscheiden, was mit diesen Informationen geschehen soll, z. B. die Anzahl der Vorkommen zählen, z. B. "counter = 0" und "if child". find ('id'). text == amazon_id: counter = counter + 1' – user3148185

0

Wenn Sie lxml.etree wechseln würden, würden Sie die volle Leistung von XPath-Ausdrücken verwenden können (Sie würden auch die Dinge beschleunigen dramatisch).

Hier ist ein Beispiel - das update Element mit einer gewünschten id Auffinden und die title Ausdrucken:

from lxml import etree as ET 

id_that_user_enters = "AL2012-2015-088" 
tree = ET.parse("example.xml") 

update = tree.xpath("//update[id = '%s']" % id_that_user_enters)[0] 
print(update.findtext("title")) 

Drucke:

Amazon Linux 2012.03 - AL2012-2015-088: medium priority package update for gnutls