读取xml并尝试将其提取为2个不同的xml

时间:2017-09-28 18:09:38

标签: python xml python-3.x

我有一个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 个答案:

答案 0 :(得分: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

以下是有关写入xml文件的文档的link

Node.writexml(writer,indent =“”,addindent =“”,newl =“”) 将XML写入writer对象。编写器应该有一个与文件对象接口匹配的write()方法。 indent参数是当前节点的缩进。 addindent参数是用于当前子节点的增量缩进。 newl参数指定用于终止换行符的字符串。

以上内容来自xml.dom.minidom文档。其中解释了如何编写及其含义。

最后,这将帮助您将所需数据写入您在writexml中以xml格式指定的文件。