使用elementtree处理后删除XML标头 [英] XML header getting removed after processing with elementtree

查看:178
本文介绍了使用elementtree处理后删除XML标头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个xml文件,我使用Elementtree在xml文件中添加了一个新标签。处理之前,我的xml文件如下所示

i have an xml file and i used Elementtree to add a new tag to the xml file.My xml file before processing is as follows

<?xml version="1.0" encoding="utf-8"?>

<PackageInfo xmlns="http://someurlpackage">


<data ID="http://someurldata1">data1</data >
<data ID="http://someurldata2">data2</data >
<data ID="http://someurldata3">data3</data >
</PackageInfo>

我使用以下python代码添加了新的数据标签并将其写入xml文件

I used following python code to add a new data tag and write it to my xml file

 tree = ET.ElementTree(xmlFile)
 root = tree.getroot()
 elem= ET.Element('data')
 elem.attrib['ID']="http://someurldata4"
 elem.text='data4'
 root[1].append(elem)
 tree = ET.ElementTree(root)
 tree.write(xmlFile)

但是生成的xml文件具有<?xml version = 1.0 encoding = utf-8?> 缺少,文件看起来如下所示

But the resultant xml file have <?xml version="1.0" encoding="utf-8"?> absent and the file looks as below

<PackageInfo xmlns="http://someurlpackage">
<data ID="http://someurldata1">data1</data >
<data ID="http://someurldata2">data2</data >
<data ID="http://someurldata3">data3</data >
</PackageInfo>

有什么方法可以包含xml标头,而不是对行进行硬编码

Is there any way to include the xml header rather than hardcoding the line

推荐答案

您似乎需要 write 方法的可选参数即可输出声明。

It looks like you need optional arguments to the write method to output the declaration.

http://docs.python.org/library/xml.etree.elementtree.html#elementtree-elementtree-objects

tree.write(xmlfile,xml_declaration=True)






恐怕我对 xml.etree.ElementTree 不太熟悉,它是python版本之间的差异。


I'm afraid I'm not that familiar with xml.etree.ElementTree and it's variation between python releases.

在这里与 lxml.etree 一起使用:

>>> from lxml import etree
>>> sample = """<?xml version="1.0" encoding="utf-8"?>
... <PackageInfo xmlns="http://someurlpackage">
... <data ID="http://someurldata1">data1</data >
... <data ID="http://someurldata2">data2</data >
... <data ID="http://someurldata3">data3</data >
... </PackageInfo>"""
>>>
>>> doc = etree.XML(sample)
>>> data = doc.makeelement("data")
>>> data.attrib['ID'] = 'http://someurldata4'
>>> data.text = 'data4'
>>> doc.append(data)
>>> etree.tostring(doc,xml_declaration=True)
'<?xml version=\'1.0\' encoding=\'ASCII\'?>\n<PackageInfo xmlns="http://someurlpackage">\n<data ID="http://someurldata1">data1</data>\n<data ID="http://someurldata2">data2</data>\n<data ID="http://someurldata3">data3</data>\n<data ID="http://someurldata4">data4</data></PackageInfo>'
>>> etree.tostring(doc,xml_declaration=True,encoding='utf-8')
'<?xml version=\'1.0\' encoding=\'utf-8\'?>\n<PackageInfo xmlns="http://someurlpackage">\n<data ID="http://someurldata1">data1</data>\n<data ID="http://someurldata2">data2</data>\n<data ID="http://someurldata3">data3</data>\n<data ID="http://someurldata4">data4</data></PackageInfo>'

这篇关于使用elementtree处理后删除XML标头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆