从元素级别的列表创建Python xml

2024-05-12 14:10:04 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我第一次使用xml处理。你知道吗

下面的python列表包含将用于创建最终xml的所有元素/节点。 列表的每一项也是一个由元素/节点和层对组成的列表。你知道吗

例如:

[“根”,1]

“root”是元素的名称,1是“root”在xml树中的级别或位置。你知道吗

[
['root', 1],
['dir', 2],
['book1',3],
['chapter1', 4],
['page1', 5],
['page2', 5],
['book2', 3],
['book3', 3],
['author', 3]
]

下面是与上述列表对应的xml

<root>
  <dir>
    <book1>
      <chapter1>
        <page1 para=4>
        <page2 para=5>
      </chapter1>
    </book1>
    <book2 para=3/>
    <book3 para=3/>
    <author name=abc>
  </dir>
</root>

我面临的问题是,我不知道如何跟踪以前的节点,以便将新节点添加到正确的父节点中?你知道吗

例如:

应添加在

那么在xml创建过程中,之后如何获取/查找的父节点,以便将子节点添加到正确的位置呢?你知道吗

有谁能指导我为这个问题写一个通用的解决方案吗?你知道吗


Tags: 名称元素列表节点dirrootxmlauthor
3条回答

我想到的是:

xml_arr = [
['root', 1],
['dir', 2],
['book1',3],
['chapter1', 4],
['page1', 5],
['page2', 5],
['book2', 3],
['book3', 3],
['author', 3]
]

from xml.etree import ElementTree as etree

root = xml_arr.pop(0)
cur_level = root[1]
root = etree.Element(root[0])
cur_element = root
parents = [root]

for tag, level in xml_arr:
    while level < cur_level:
        cur_level -= 1
        parents.pop()
        cur_element = parents[-1]
    if level == cur_level:
        parents[-2].append(etree.Element(tag))
    if level > cur_level:
        cur_level = level
        new_elem = etree.Element(tag)
        cur_element.append(new_elem)
        parents.append(new_elem)
        cur_element = new_elem

print etree.tostring(root)

这张照片:

<root><dir><book1><chapter1><page1 /><page2 /></chapter1></book1><book2 /><book3 /><author /></dir></root>

或者在印刷精美时:

<root>
    <dir>
        <book1>
            <chapter1>
                <page1/>
                <page2/>
            </chapter1>
        </book1>
        <book2/>
        <book3/>
        <author/>
    </dir>
</root>

上周我也有同样的问题。这是我的解决办法

http://www.yilmazhuseyin.com/blog/dev/convert-python-dict-xml/

你的方法和我的基本区别是我用的是dicts而不是list

保留一个“lastforlevel”数组,该数组存储在给定级别追加的最后一项。如果尝试为级别n创建元素,则需要将其附加到lastforlevel[n-1]。你知道吗

相关问题 更多 >