使用Python从ElementTree中删除XML版本标记

使用Python从ElementTree中删除XML版本标记,python,xml,elementtree,Python,Xml,Elementtree,我需要手动将xml版本添加为字符串,因此需要删除ElementTree生成的xml版本。如何删除第3行的重复xml版本节点 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 2.0//EN" "http://www.w3.org/2001/SMIL20/SMIL20.dtd"> <?xml version="1.0" encoding="utf-8"?>

我需要手动将xml版本添加为字符串,因此需要删除ElementTree生成的xml版本。如何删除第3行的重复xml版本节点

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 2.0//EN" "http://www.w3.org/2001/SMIL20/SMIL20.dtd">
<?xml version="1.0" encoding="utf-8"?>
<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
  <head>
    <meta base="rtmp://cp23636.edgefcs.net/ondemand"/>
  </head>
  <body>
    <switch>
      <video src="mp4:soundcheck/1/clay_aiken/02_sc_ca_sorry_256.mp4" system-bitrate="336000"/>
      <video src="mp4:soundcheck/1/clay_aiken/02_sc_ca_sorry_512.mp4" system-bitrate="592000"/>
      <video src="mp4:soundcheck/1/clay_aiken/02_sc_ca_sorry_768.mp4" system-bitrate="848000"/>
      <video src="mp4:soundcheck/1/clay_aiken/02_sc_ca_sorry_1128.mp4" system-bitrate="1208000"/>
    </switch>
  </body>
</smil>

这是剧本

def prettify(elem):
    """Return a pretty-printed XML string for the Element.
    """
    rough_string = ElementTree.tostring(elem, 'utf-8')
    reparsed = minidom.parseString(rough_string)
    return reparsed.toprettyxml(indent="  ", encoding = 'utf-8')

xmlver = '<?xml version="1.0" encoding="utf-8"?>\n'
doctype = '<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 2.0//EN" "http://www.w3.org/2001/SMIL20/SMIL20.dtd">\n'

with open(sys.argv[1], 'rU') as f:
    reader = csv.DictReader(f)
    for row in reader:
        root = Element('smil')
        root.set('xmlns', 'http://www.w3.org/2001/SMIL20/Language')
        head = SubElement(root, 'head')
        meta = SubElement(head, 'meta base="rtmp://cp23636.edgefcs.net/ondemand"')
        body = SubElement(root, 'body')

        switch_tag = ElementTree.SubElement(body, 'switch')

        for suffix, bitrate in video_data:
            attrs = {'src': ("mp4:soundcheck/{year}/{id}/{file_root_name}_{suffix}.mp4"
                             .format(suffix=str(suffix), **row)),
                     'system-bitrate': str(bitrate),
                     }
            ElementTree.SubElement(switch_tag, 'video', attrs)
def美化(elem):
“”“为元素返回打印精美的XML字符串。
"""
rough_string=ElementTree.tostring(元素'utf-8')
重解析=minidom.parseString(粗字符串)
返回重新解析的.toprettyxml(indent=,encoding='utf-8')
xmlver='\n'
doctype='\n'
将open(sys.argv[1],'rU')作为f:
reader=csv.DictReader(f)
对于读取器中的行:
根=元素('smil')
root.set('xmlns','http://www.w3.org/2001/SMIL20/Language')
head=子元素(根,“head”)
元=子元素(头,'元基='rtmp://cp23636.edgefcs.net/ondemand"')
body=子元素(根“body”)
switch_tag=ElementTree.SubElement(主体“switch”)
对于后缀,视频数据中的比特率:
attrs={'src':(“mp4:soundcheck/{year}/{id}/{file_root_name}{suffix}.mp4”
.format(后缀=str(后缀),**行)),
“系统比特率”:str(比特率),
}
ElementTree.SubElement(开关标签'video',attrs)

保留由
ElemenTtree
生成的xml处理指令,并在
minidom
文档中插入doctype节点:

def prettify(elem, doctype=None):
    """Return a pretty-printed XML string for the Element.
    """
    rough_string = ElementTree.tostring(elem, 'utf-8')
    reparsed = minidom.parseString(rough_string)
    if doctype is not None:
        reparsed.insertBefore(doctype, reparsed.documentElement)
    return reparsed.toprettyxml(indent="  ", encoding = 'utf-8')

doctype = minidom.getDOMImplementation('').createDocumentType(
    'smil', '-//W3C//DTD SMIL 2.0//EN',
    'http://www.w3.org/2001/SMIL20/SMIL20.dtd')

虽然这个答案解决了眼前的问题,但请查看关于这个主题的其他问题,以获得更完整的解决方案。