如何将 XML 父标签附加到子标签?
How can I append XML parent tags to child tags?
我有一个示例 XML 文件:
<Root>
<Parent_1>
<Child_1> Text 1 </Child_1>
<Child_2> Text 2 </Child_2>
</Parent_1>
<Parent_2>
<Child_3> Text 3 </Child_3>
<Child_4> Text 4 </Child_4>
</Parent_2>
我想将父标签附加到层次结构中。
<Root>
<Root_Parent_1>
<Root_Parent_1_Child_1> Text 1 </Root_Parent_1_Child_1>
<Root_Parent_1_Child_2> Text 2 </Root_Parent_1_Child_2>
</Root_Parent_1>
<Root_Parent_2>
<Root_Parent_2_Child_3> Text 3 </Root_Parent_2_Child_3>
<Root_Parent_2_Child_4> Text 4 </Root_Parent_2_Child_4>
</Root_Parent_2>
</Root>
有人可以帮我尝试读取文件并附加标签吗?
基本上,您只想编写 XML 树的遍历,在遍历过程中在目标树中创建新元素,并累积要添加到标签的前缀。
下面的handle_node
函数处理遍历中的一个节点,returns它创建的目标元素(假设你的文件是toto.xml
):
import lxml.etree as et
def handle_node(nd, prefix):
new_prefix = f'{prefix}_{nd.tag}' if prefix != '' else nd.tag
elem = et.Element(new_prefix)
if len(nd) == 0:
elem.text = nd.text
return elem
for k in nd:
elem.append(handle_node(k, new_prefix))
return elem
root = et.parse('toto.xml').getroot()
target = handle_node(root, '')
您可以打印出 target
XML 树来检查结果是否符合您的预期:
print(et.tostring(target, pretty_print=True).decode())
我有一个示例 XML 文件:
<Root>
<Parent_1>
<Child_1> Text 1 </Child_1>
<Child_2> Text 2 </Child_2>
</Parent_1>
<Parent_2>
<Child_3> Text 3 </Child_3>
<Child_4> Text 4 </Child_4>
</Parent_2>
我想将父标签附加到层次结构中。
<Root>
<Root_Parent_1>
<Root_Parent_1_Child_1> Text 1 </Root_Parent_1_Child_1>
<Root_Parent_1_Child_2> Text 2 </Root_Parent_1_Child_2>
</Root_Parent_1>
<Root_Parent_2>
<Root_Parent_2_Child_3> Text 3 </Root_Parent_2_Child_3>
<Root_Parent_2_Child_4> Text 4 </Root_Parent_2_Child_4>
</Root_Parent_2>
</Root>
有人可以帮我尝试读取文件并附加标签吗?
基本上,您只想编写 XML 树的遍历,在遍历过程中在目标树中创建新元素,并累积要添加到标签的前缀。
下面的handle_node
函数处理遍历中的一个节点,returns它创建的目标元素(假设你的文件是toto.xml
):
import lxml.etree as et
def handle_node(nd, prefix):
new_prefix = f'{prefix}_{nd.tag}' if prefix != '' else nd.tag
elem = et.Element(new_prefix)
if len(nd) == 0:
elem.text = nd.text
return elem
for k in nd:
elem.append(handle_node(k, new_prefix))
return elem
root = et.parse('toto.xml').getroot()
target = handle_node(root, '')
您可以打印出 target
XML 树来检查结果是否符合您的预期:
print(et.tostring(target, pretty_print=True).decode())