这是我第一次使用xml处理。
下面的python列表包含将用于创建最终xml的所有元素/节点。列表中的每一项也是由元素/节点和级别对组成的列表。
例如:
‘'root',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创建过程中,如何获取/查找父节点之后,才能将子节点添加到正确的位置呢?
有人能指导我为这个问题写一个通用的解决方案吗?
发布于 2011-12-14 05:00:46
保留一个"lastforlevel“数组,该数组存储在给定级别追加的最后一项。如果尝试为level n创建元素,则需要将其附加到lastforlevel[n-1]。
发布于 2011-12-14 05:11:49
上周我也遇到了同样的问题。以下是我的解决方案
http://www.yilmazhuseyin.com/blog/dev/convert-python-dict-xml/
你的方法和我的方法的基本区别是我使用字典而不是列表
发布于 2011-12-14 05:29:23
这是我想出来的:
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>https://stackoverflow.com/questions/8496052
复制相似问题