Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何用lxml更新XML文件_Python_Xml_Lxml - Fatal编程技术网

Python 如何用lxml更新XML文件

Python 如何用lxml更新XML文件,python,xml,lxml,Python,Xml,Lxml,我想使用lxml库用新信息更新xml文件。 例如,我有以下代码: >>> from lxml import etree >>> >>> tree = etree.parse('books.xml') 其中“books.xml”文件包含以下内容: 我想用新书更新此文件: >>> new_entry = etree.fromstring('''<book category="web" cover="paperback"&

我想使用lxml库用新信息更新xml文件。 例如,我有以下代码:

>>> from lxml import etree
>>>
>>> tree = etree.parse('books.xml')
其中“books.xml”文件包含以下内容:

我想用新书更新此文件:

>>> new_entry = etree.fromstring('''<book category="web" cover="paperback">
... <title lang="en">Learning XML 2</title>
... <author>Erik Ray</author>
... <year>2006</year>
... <price>49.95</price>
... </book>''')
>>new_entry=etree.fromstring(“”)
…学习XML 2
…埃里克·雷
... 2006
... 49.95
... ''')

我的问题是,如何使用
新条目
树更新
元素树并保存文件。

现在,获取树的根,添加新元素,将树作为字符串保存到文件中:

from lxml import etree

tree = etree.parse('books.xml')

new_entry = etree.fromstring('''<book category="web" cover="paperback">
<title lang="en">Learning XML 2</title>
<author>Erik Ray</author>
<year>2006</year>
<price>49.95</price>
</book>''')

root = tree.getroot()

root.append(new_entry)

f = open('books-mod.xml', 'wb')
f.write(etree.tostring(root, pretty_print=True))
f.close()
从lxml导入etree
tree=etree.parse('books.xml')
new_entry=etree.fromstring(“”)
学习XML 2
埃里克·雷
2006
49.95
''')
root=tree.getroot()
root.append(新的\u条目)
f=打开('books-mod.xml','wb')
f、 write(etree.tostring(root,pretty\u print=True))
f、 关闭()

我没有足够的声誉发表评论,因此我会写一个答案


使纪尧姆法典生效的最简单的更改是更改行

f = open('books-mod.xml', 'w')


pretty_print=True不适用于附加节点。此代码的最后一部分不适用于我
etree.tostring()
返回
bytes
,因此
f.write()
抛出以下异常:
TypeError,write()参数必须是str,而不是bytes
。我建议将
字节
转换为
字符串
并在
etree.tostring(root,pretty\u print=True)
的末尾添加
解码(“utf-8”)
,或者以这种方式使用
元素树.write()
方法
树.write(“new/file/path”)
。虽然第一个代码段更新了一个现有文件,而第二个代码段创建了一个新文件,但这两个代码段都可以用于此问题。使代码正常工作的最简单的更改是将行f=open('books-mod.xml','w')更改为f=open('books-mod.xml','wb'),谢谢@pt1,它已更新:)
f = open('books-mod.xml', 'wb')