Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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 从字符串源修改XML文件-如何做?_Python_Xml - Fatal编程技术网

Python 从字符串源修改XML文件-如何做?

Python 从字符串源修改XML文件-如何做?,python,xml,Python,Xml,我有一个问题,我想更改XML中的一些行,但这个XML不在文件中,而是在字符串中。为此,我使用了python3.x和libxml.etree.ElementTree 我知道这些代码适用于项目中的文件,但正如我所说的,我不需要文件,只需要对字符串源进行操作 source_tree = ET.ElementTree(ET.fromstring(source_config)) source_tree_root = ET.fromstring(source_config) for item in sour

我有一个问题,我想更改
XML
中的一些行,但这个
XML
不在文件中,而是在
字符串中。为此,我使用了
python3.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\u tree.write(source\u config,encoding='latin-1')
但这不起作用(将所有
XML
视为一个名称)。

好的,我以为您使用的是lxml。我的错。下面是使用lxml的方法。我认为lxml是优越的

下面是将字符串解析为XML文档的基本方法

from lxml import etree

doc = etree.fromstring(yourstring)

for e in doc.xpath('//sometagname'):
    e.set('foo', 'bar')

我认为您不需要同时使用
source\u tree
source\u tree\u root
。两者兼而有之,你创造了两种不同的东西。使用
source\u-tree
编写时,不会得到对
source\u-tree\u-root
所做的更改

尝试从
source\u tree\u root
(它只是一个元素)创建一个ElementTree,如下所示(未测试,因为您没有提供一个


OP没有使用lxml;他们在用ElementTree。看起来他们还在设置文本值;不是一个属性。是的,作为一个一直使用lxml的人,我对xml.etree部分做了适当的修饰。我刚刚演示了如何修改文档;设置属性就是修改文档。“我认为lxml更优秀。”-我100%同意澄清一下,您的目标是将更改后的XML转换回字符串(而不是将其写入文件),对吗?好问题@Tomalak。我看到了“不知道如何保存它”和“我尝试了source_tree.write”,并假设了一个文件。
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")