从层次结构级别和文本创建XML树[关闭]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从层次结构级别和文本创建XML树[关闭]相关的知识,希望对你有一定的参考价值。

我有一个文本文件,其层次结构级别和文本如下:

1 A
2 B
2 C
3 D
3 E
2 F
1 G   

我想创建一个这样的XML文档:

<A>
  <B></B>
  <C>
    <D></D>
    <E></E>
  </C>
  <F></F>
</A>
<G></G>

是否有一个python库可以完成这项工作?

答案

与此同时,我自己也找到了答案。

import xml.etree.ElementTree as ET

class item:
""" class to hold level and tag """
    def __init__(self, line):
        __s_list = (line.split(' ', 1))
        if len(__s_list) != 2:
            raise Exception("Invalid list length: " + str(len(__s_list)) + " at " + line)
        self.level = int(__s_list[0])
        self.tag = __s_list[1].lstrip()

# Read infile and put items into list
list = []
with open(path + "sample.txt") as infile:
    for line in infile:
        line = line.rstrip('
')
        list.append(item(line))

root = ET.Element("root")
tree = ET.ElementTree(root)

# Create list to hold last parent per level
last_parents = []
last_parents[0] = root

for element in list:
    # extend last_parents if necessary
    if len(last_parents) <= element.level + 1:
    last_parents.append[None]
    # insert element into tree and save it in last_parents
    last_parents[element.level] =  ET.SubElement(last_parents[element.level-1], element.tag)
    print(str(element.level) + ": "+ element.tag)

tree.write(path+"sample.xml")

得到:

<root>
    <A>
        <B />
        <C>
            <D />
            <E />
        </C>
        <F />
    </A>
    <G  />
</root>

以上是关于从层次结构级别和文本创建XML树[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

java解析xml的几种方式哪种最好?

如何在C#后面的代码中动态创建数据模板并绑定树视图层次结构数据

使用 Python sqlparse 获取查询树/层次结构

将同一层次结构级别的两个节点与 PL/SQL 关联

根据内部元素的 ID 将平面 xml 转换为树层次结构

在java中解析xml有哪几种方法