Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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/3/xpath/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 2.7 lxml-无法替换子对象的子对象_Python 2.7_Xpath_Lxml_Lxml.objectify - Fatal编程技术网

Python 2.7 lxml-无法替换子对象的子对象

Python 2.7 lxml-无法替换子对象的子对象,python-2.7,xpath,lxml,lxml.objectify,Python 2.7,Xpath,Lxml,Lxml.objectify,我在应用程序中使用lxml作为XML解析的解决方案 我知道lxml只能替换父级的直接子级,但不能使用 XML示例: <root> <dc> <batman alias='dark_knight' /> </dc> </root> 我在一个字符串中有一个修改过的标记,如下所示 <batman alias='not_dark_knight' /> 我需要一些关于使用xpath“

我在应用程序中使用lxml作为XML解析的解决方案

我知道lxml只能替换父级的直接子级,但不能使用

XML示例:

<root>

    <dc>

        <batman alias='dark_knight' />

    </dc>

</root>

我在一个字符串中有一个修改过的标记,如下所示

<batman alias='not_dark_knight' />

我需要一些关于使用xpath“/root/dc/batman”替换原始XML的帮助

from lxml import etree

original_xml = "<root><dc><batman alias='dark_knight' /></dc></root>"
modified_tag = "<batman alias='not_dark_knight' />"
x_path = '/root/dc/batman'
original_obj = etree.fromstring(original_xml)
modified_obj = etree.fromstring(modified_tag)

original_obj.replace(original_obj.xpath(x_path)[0], modified_obj)
从lxml导入etree
原始_xml=“”
修改的_标签=“”
x_path='/root/dc/batman'
原始对象=etree.fromstring(原始xml)
modified_obj=etree.fromstring(modified_标记)
原始对象替换(原始对象xpath(x_路径)[0],修改的对象)
这会抛出一个ValueError:元素不是此节点的子元素。 有什么方法可以很好地替换字符串吗?(仅使用lxml)


请理解,我想要一个只使用lxml库的解决方案。

正如您已经知道的,您应该在要替换的元素的父元素上调用
replace()
。您可以使用
.getparent()
动态访问父级:

batman = original_obj.xpath(x_path)[0]
batman.getparent().replace(batman, modified_obj)

这对我有用。谢谢@alecxe。我可能错过了