2016-04-13 16 views
0

benim xml dosyasında başka noktadaxml dosyalarındaki belirli etiketleri nasıl yok sayılır? Benim xml dosyasında bazı noktada

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

ile katkıda bulunan sahiptir

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

ile katkıda ben xml dosyaları arasında ayrıştırmaz bir piton senaryoyu yazdım ve var İhtiyacımız olan etiketleri bir çıktı dosyasına geri gönderin. Ama katkıda bulunanmın altında iki farklı şey Ip ve kullanıcı adı vardı, id. Ip'i göz ardı etmek istiyorum ve sadece çıktı dosyasına kullanıcı adı ve kimliği yazmak istiyorum. Her iki ben KeyError gibi kilit hatası alıyorum varsa: 'kullanıcı adı'

de bu

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

Lütfen, sadece kendi varolan yerine bir [Python XML ayrıştırıcısı] (http://stackoverflow.com/questions/1912434/how-do-i-parse-xml-in-python) kullanın. Savaştan test edilmiş ve sadece sizden daha fazla insan için çalıştığı kanıtlanmıştır. Ve ayrıca, bu soru ayrıştırıcı için yazdığınız kod olmadan cevapsızdır. –

cevap

1

Basitçe etiketiyle yerleşik Python xml element tree module, özellikle onun dom nesnesini kullanın benim kodudur ve metin nerede niteliklerini

İlk katkıda bulunan türü:

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> 

İkinci katkıda bulunan türü:

etiket adıyla bir hale getiren
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