XML文件生成不需要的数据

时间:2017-10-02 18:43:59

标签: python xml

我尝试从不同的xml文件中读取一些东西到xml文件后,一切顺利,但是xml文件中有很少的不需要的标签,我生成它作为输出。

这是我试过的

    from xml.etree import ElementTree as ET
    from xml.dom.minidom import getDOMImplementation
    from xml.dom.minidom import parseString
    tree = ET.parse('C:\\Users\\ca33.xml')
    root = tree.getroot()
    impl = getDOMImplementation()
    #print(root)
    header = [root.find('header')]
    for h in header:
        h1=(parseString(ET.tostring(h)).toprettyxml(''))
        #print(h1)
    commands = root.findall(".//records//")
    recs=[c for c in commands if c.find('soc_id')!=None and   c.find('soc_id').text[:9]=='000001051']
    bb=""
    for rec in recs:
        aa=(parseString(ET.tostring(rec)).toprettyxml(''))
        bb=bb+aa
    #print(bb)
    newdoc = impl.createDocument(None, "file"+h1+bb, None)
    newdoc.writexml(open('data.xml', 'w'),'\n'.join([line for line in newdoc.toprettyxml(indent=' '*2).split('\n') if line.strip()]))

我将输出data.xml文件作为。

<?xml version="1.0" ?><?xml version="1.0" ?>
<file<?xml version="1.0" ?>
<header>
<number_of_records>41</number_of_records>
</header>
<?xml version="1.0" ?>
<record>
<soc_id>00000105139E3B82</soc_id>
</record>
<?xml version="1.0" ?>
<soc_id>00000105139E3640</soc_id>
</record>
<?xml version="1.0" ?>
<header>


<number_of_records>41</number_of_records>

所以你可以看到许多<?xml version="1.0" ?>的标签在任何地方生成,在最后它再次开始从第一次开始写入数据,但留下2行间距

1 个答案:

答案 0 :(得分:1)

所以,我理解的是,您首先尝试读取xml文件,然后尝试将相同的数据写入不同的文件。 在这个过程中,你遇到了问题

   from xml.etree import ElementTree as ET
   tree = ET.parse('C:\\Users\\ca33.xml')
   root = tree.getroot()
   for header_ex in root.findall('header'):
       h = [ET.tostring(c) for c in header_ex]
       str_header=str(h)
   for record_ex in root.findall('records'):
       r = [ET.tostring(c) for c in record if c.find('soc_id')!=None and c.find('soc_id').text[:9]=='000001051']
       for rec in r:
           str_rec=str(rec)
   with open("output.xml","w") as f:
       f.write("<?xml version='1.0' encoding='ASCII' standalone='yes'?>")
       f.write("<file>"+"<header>"+str_header+"</header>")
       f.close()

由于你没有发布任何随机数据,我认为它是你发布的问题的方式。我认为记录是一个标签,它里面有更多或更多的子/子标签,而且它是&#39;是我在它上面循环两次的原因。

  

并停止在代码中使用不必要的导入。