2012-12-21 38 views
-1

我已经编写了一个Python脚本来创建一些XML,但是我没有找到编辑Python中标题的方法。使用Python编辑XML标题

基本上,而不必将此作为我的标题:

<?xml version="1.0" ?> 

我需要这样的:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 

我看着这是尽我所能,却发现没有办法添加独立来自Python内部的状态。所以我认为我必须在文件创建完成后重新查看文件,然后替换文本。我在几个地方读过,我应该远离使用readlines(),因为它可能会破坏XML格式。

目前我的代码来做到这一点 - 这是我从另一个职位#1关于使用Python编辑XML得到了 - 是:

doc = parse('file.xml') 
elem = doc.find('xml version="1.0"') 
elem.text = 'xml version="1.0" encoding="UTF-8" standalone="no"' 

这为我提供了一个KeyError异常。我试图调试它无济于事,这导致我相信也许XML标题并不打算以这种方式进行编辑。或者我的代码错了。

如果有人好奇(或奇迹般地知道如何将独立状态到Python代码),这里是我的代码写的xml文件:

with open('file.xml', 'w') as f: 
    f.write(doc.toprettyxml(indent='    ')) 

有些人不喜欢“toprettyxml”,但与我相对基本的水平,这似乎是最好的选择。

无论如何,如果有人能提供一些建议或见解,我将非常感激。

+0

你在使用API​​,什么Python版本? –

+0

@MartijnPieters Python 2.7.3和我正在使用IDLE。谢谢。 –

+0

IDLE是一个IDE,不是XML API。您是否使用['xml.etree.ElementTree'库](http://docs.python.org/2/library/xml.etree.elementtree.html)? –

回答

0

xml.etree API不提供任何选项来在XML声明中写出standalone属性。

您可能需要改用lxml library;它使用相同的ElementTree API,但提供了对输出的更多控制。 tostring()支持standalone标志:

from lxml import etree 

etree.tostring(doc, pretty_print=True, standalone=False) 

或使用.write(),支持相同的选项:

doc.write(outputfile, pretty_print=True, standalone=False) 
+0

我遇到过这种情况,但希望坚持Python标准库。我想现在可能不行。我会试试lxml。 –

+0

@CreativeName:另一种方法是在没有声明的情况下编写其余的XML之前自行写出声明。 –