2017-09-28 37 views
1

我有一個XML文件,它看起來象下面這樣:讀取XML,並試圖將其解壓縮到2個不同的XML的

<?xml version="1.0" encoding="ASCII" standalone="yes"?> 
<file> 
<records> 
    <record> 
    <device_serial_number>PAD203137687</device_serial_number> 
    <device_serial_number_2>203137687</device_serial_number_2> 
    </record> 
    <record> 
    <device_serial_number>PAD203146024</device_serial_number> 
    <device_serial_number_2>203146024</device_serial_number_2> 
    </record> 
</records> 
</file> 

現在我要檢查DEVICE_SERIAL_NUMBER在每個記錄和檢查,如果最後4個字符6024,如果是,那麼寫完整的記錄數據到一個名爲one.xml

newxml文件我已經從我的理解嘗試以下

from xml.etree import ElementTree as ET 
    tree = ET.parse('C:\\Users\\x3.xml') 
    for node in tree.findall('.//records//record/'): 
     print("<"+str(node.tag) + "> "+"<"+str(node.text)+"/>") 

回答

1

所以,你可以嘗試類似下面:

 from xml.etree import ElementTree as ET 
    from xml.dom.minidom import getDOMImplementation 
    from xml.dom.minidom import parseString 
    tree = ET.parse('C:\\Users\\x3.xml') 
    root = tree.getroot() 
    impl = getDOMImplementation() 
    #print(root) #just to check 
    commands = root.findall(".//records//") 
    recs=[c for c in commands if c.find('device_serial_number')!=None and 
    c.find('soc_id').text[-4:]=='6024'] 
    bb="" 
    for rec in recs: 
     aa=(parseString(ET.tostring(rec)).toprettyxml('')) 
     bb=bb+aa 
    #print(bb) #it will have all data you need, write these into files 
    newdoc = impl.createDocument(None, bb, None) 
    newdoc.writexml(open('your_output_file.xml', 'w'), 
    indent="", 
    addindent="", 
    newl='') #check documentation for these 

這裏是link瞭解有關寫入XML文件的文檔。

Node.writexml(writer,indent =「」,addindent =「」,newl =「」) 將XML寫入writer對象。作者應該有一個與文件對象接口匹配的write()方法。縮進參數是當前節點的縮進。 addindent參數是用於當前子節點的遞增縮進。 newl參數指定用於終止換行符的字符串。

以上內容來自xml.dom.minidom documentation.Which解釋瞭如何編寫以及它們的含義。

最後,這將幫助您將所需數據寫入以xml格式在writexml中指定的文件。

+0

感謝其相當明確 – user8521874

+0

@ user8521874沒問題 –