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(lxml)更改xml中的父级_Python_Xml_Parsing_Lxml - Fatal编程技术网

通过Python(lxml)更改xml中的父级

通过Python(lxml)更改xml中的父级,python,xml,parsing,lxml,Python,Xml,Parsing,Lxml,您好,我正在使用lxml解析和完全修改Python3中的XML文件,我需要将新元素放入现有元素并更改它们的父元素 例如: 旧xml 某物 不一样的东西 新xml <a> <new_parent> <b>something</b> <c>something different</c> </new_parent> <a> 某物 不一样的东西 有可能吗?我不确定是否有一个函

您好,我正在使用lxml解析和完全修改Python3中的XML文件,我需要将新元素放入现有元素并更改它们的父元素

例如: 旧xml


某物
不一样的东西
新xml

<a>
  <new_parent>
    <b>something</b>
    <c>something different</c>
  </new_parent>
<a>

某物
不一样的东西

有可能吗?

我不确定是否有一个函数可以直接满足您的需要。我将按如下操作:创建一个
new\u parent
节点,将
a
的子节点追加到
new\u parent
节点,并将
new\u parent
追加到
a

import lxml.etree

xml = '''<?xml version='1.0' encoding='ASCII'?>
<root>
  <a>
    <b>something</b>
    <c>something different</c>
  </a>
</root>'''

root = lxml.etree.fromstring(xml)
a = root.find('.//a')
parent = lxml.etree.Element('new_parent')
for child in a:
    parent.append(child)
a.append(parent)

print lxml.etree.tostring(root, xml_declaration=True)

下层选民:我怎样才能改进答案?如果你有更好的方法来解决这个问题,请把它贴出来。
import lxml.etree

xml = '''<?xml version='1.0' encoding='ASCII'?>
<root>
  <a>
    <b>something</b>
    <c>something different</c>
  </a>
</root>'''

root = lxml.etree.fromstring(xml)
a = root.find('.//a')
parent = lxml.etree.Element('new_parent')
for child in a:
    parent.append(child)
a.append(parent)

print lxml.etree.tostring(root, xml_declaration=True)
<?xml version='1.0' encoding='ASCII'?>
<root>
  <a>
    <new_parent>
      <b>something</b>
      <c>something different</c>
    </new_parent>
  </a>
</root>
root = lxml.etree.fromstring(xml)
a = root.find('.//a')
parent = lxml.etree.Element('new_parent')
parent.extend(a)
a.append(parent)