我有一个问题,我想在XML
中更改某些行,但是此XML
不在文件中,而是在string
中。我为此使用Python 3.x
和lib xml.etree.ElementTree
。
我有这段代码,我知道这些代码适用于项目中的文件,但是正如我所说,我不需要文件,只希望对字符串源进行操作。
source_tree = ET.ElementTree(ET.fromstring(source_config))
source_tree_root = ET.fromstring(source_config)
for item in source_tree_root.iter('generation'):
item.text = item.text.replace(self.firstarg, self.secondarg)
这有效,但是我不知道如何保存。我试过了
source_tree.write(source_config, encoding='latin-1')
,但这不起作用(将所有XML
作为名称处理。)
答案 0 :(得分:1)
我认为您既不需要source_tree
也需要source_tree_root
。两者兼而有之,您将创建两个独立的事物。使用source_tree
书写时,不会对source_tree_root
进行更改。
尝试从source_tree_root
(这只是一个Element)创建ElementTree,就像这样(由于您没有提供mcve,所以未尝试)...
source_tree_root = ET.fromstring(source_config)
for item in source_tree_root.iter('generation'):
item.text = item.text.replace(self.firstarg, self.secondarg)
ET.ElementTree(source_tree_root).write("output.xml")
答案 1 :(得分:0)
好的,我认为您正在使用lxml。我的错。好了,这就是使用lxml的方法。我认为lxml更好。
这是将字符串解析为XML文档的基本方法。
from lxml import etree
doc = etree.fromstring(yourstring)
for e in doc.xpath('//sometagname'):
e.set('foo', 'bar')