我是xml新手,想复制一个节点。虽然它复制了这个节点,但当我添加它时,关闭标签不匹配。下面是我正在解析的xml。
<doc>
<branch name="release01" hash="f200013e">
<sub-branch name="subrelease01">
xml,sgml
</sub-branch>
</branch>
</doc>
下面是我用来解析xml的代码。
import lxml.etree as ET
import copy
tree = ET.ElementTree(file="doc2.xml")
root = tree.getroot()
lst_nodes = tree.findall("branch")
ele = 0
while ele < len(lst_nodes):
ref = lst_nodes[ele]
if (lst_nodes[ele].attrib.get("name") == "release01"):
count = 0
while count < 1:
copied = copy.deepcopy(ref)
ref.append(copied)
count=count+1
ele+=1
ET.dump(root)
观察到的输出结果是:
<doc>
<branch name="release01" hash="f200013e">
<sub-branch name="subrelease01">
xml,sgml
</sub-branch>
<branch name="release01" hash="f200013e">
<sub-branch name="subrelease01">
xml,sgml
</sub-branch>
</branch>
</branch>
</doc>
你可以看到 "分支 "的结束标签是不匹配的. 谁能帮我找出我在复制或追加节点时的错误?
我相信,你试图产生的输出是。
<doc>
<branch name="release01" hash="f200013e">
<sub-branch name="subrelease01">
xml,sgml
</sub-branch>
</branch>
<branch name="release01" hash="f200013e">
<sub-branch name="subrelease01">
xml,sgml
</sub-branch>
</branch>
</doc>
你所犯的错误是,你把你的复制节点附加在了 ref
组成要素 ref
本身,而不是将您的副本 之后 ref
(即你想让这个副本成为 ref
而不是子元素)。) 为了实现所需的行为,你需要将 ref 的副本附加到父元素的 ref
这可以通过使用 getparent()
方法,然后用 append()
或者更方便的是您可以直接使用Element的 addnext()
方法。
即取代 ref.append(copy)
与 ref.addnext(copy)