2016-04-13 11 views
0

An einem gewissen Punkt in meiner XML-Datei Ich habe Beiträger mitWie ignoriert man bestimmte Tags in XML-Dateien?

<revision> 
     <id>1</id> 
     <timestamp>2012-10-25T15:50:18Z</timestamp> 
     <contributor> 
     <ip>127.0.0.1</ip> 
     </contributor> 
</revision> 

An einem anderen Punkt in meiner XML-Datei haben Beiträger mit

<revision> 
     <id>2</id> 
     <parentid>1</parentid> 
     <timestamp>2012-10-26T20:13:56Z</timestamp> 
     <contributor> 
     <username>Reedy</username> 
     <id>2</id> 
     </contributor> 
</revision> 

ich einen Python-Skript geschrieben, das durch die XML-Dateien analysieren wird und Gib alle benötigten Tags in eine Ausgabedatei zurück. Aber unter meinem Mitarbeiter hatte ich zwei verschiedene Dinge: IP und Username, ID. Ich möchte Ip ignorieren und möchte nur Benutzername und ID in meine Ausgabedatei schreiben. Wenn beide mir einen Schlüssel Fehler wie KeyError bekommen: ‚username‘

gut ist mein Code

import xmltodict 
with open('path to xml file') as xml_file: 
    dic_xml = xmltodict.parse(xml_file.read()) 
    page = dic_xml['mediawiki']['page'] 
    data = list() 
    for rev in page['revision']: 
     my_string = "" 
     my_string += " " + "username:" + dict(rev['contributor'])['username'] 
     my_string += " " + "userid:" + dict(rev['contributor'])['id'] 
     my_string += "\n" 
     data.append(my_string) 

with open('output', 'w') as writingFile: 
    for i in data: 
     writingFile.write(i) 
+2

Verwenden Sie bitte einen vorhandenen [Python XML-Parser] (http://stackoverflow.com/questions/1912434/how-do-i-parse-xml-in-python), anstatt Ihren eigenen zu schreiben. Es ist kampferprobt und funktioniert nachweislich für mehr Menschen als nur für dich. Und außerdem ist diese Frage ohne den Code, den Sie für den Parser geschrieben haben, nicht zu beantworten. –

Antwort

1

Verwenden Sie einfach das integrierten Python xml element tree module, insbesondere seinen dom Objekt mit dem Tag und Textattribute wo

Erste Beiträger Typ:

import xml.etree.ElementTree as etree 

xmlfile = '''\ 
<revision> 
     <id>1</id> 
     <timestamp>2012-10-25T15:50:18Z</timestamp> 
     <contributor> 
     <ip>127.0.0.1</ip> 
     </contributor> 
</revision>''' 

dom = etree.fromstring(xmlfile) 
data = dom.findall('contributor/*') 

with open('output', 'w') as writingFile: 
    for items in data: 
     if items.tag != 'ip': 
      writingFile.write(items.tag + ': ' + items.text + '\n') 
# <NOTHING> 

Zweiter Beiträger Typ:

Sie können Tag-Namen konditionieren
xmlfile = '''\ 
<revision> 
     <id>2</id> 
     <parentid>1</parentid> 
     <timestamp>2012-10-26T20:13:56Z</timestamp> 
     <contributor> 
     <username>Reedy</username> 
     <id>2</id> 
     </contributor> 
</revision>''' 

dom = etree.fromstring(xmlfile) 
data = dom.findall('contributor/*') 

with open('output', 'w') as writingFile: 
    for items in data: 
     if items.tag != 'ip': 
      writingFile.write(items.tag + ': ' + items.text + '\n') 
# username: Reedy 
# id: 2 
Verwandte Themen