使用Python将XML转换为MYSQL

2024-09-30 02:15:24 发布

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

我有following test.xml

<root>
<parent>
    <ID>1</ID>
    <child1>Value1</child1>
    <child2>value11</child2>
    <child3>
       <subchild>value111</subchild>
    </child3>
</parent>
<parent>
    <ID>2</ID>
    <child1>value2</child1>
    <child2>value22</child2>
    <child2>value333</child2>
</parent>
<parent>
    <ID>3</ID>
    <child1>value3</child1>
    <child2>value33</child2>
</parent>
<parent>
    <ID>4</ID>
    <child1>value4</child1>
    <child2>value44</child2>
</parent>
</root>

我试图完成的工作如下:我想遍历test.xml,对于每个父节点,我想将所有子节点放在一个字典中,其中标记是索引,文本是值,一旦到达父节点的末尾,就将其添加到数据库中,重置字典并移到下一个父节点。

所以对于我的第一个父母

    insert = {'ID':1,'child1':'value1','child2':'value11','subchild':'value111'}

在SQL查询中使用它,然后转到下一个父级重置字典并执行相同的操作。 不是每个父母都有相同数量的孩子,有些孩子有子孩子。

我试过:

    value = []
    tag = []

    from elementtree import ElementTree as ET
    for parent in tree.getiterator():
        for child in parent:
             value.append(child.text)
             tag.append(child.tag)

但我不知道怎样才能得到我想要的结果。为了使文章尽可能简单,我省略了检索和打开xml。这是我试图使用的方法,但我认为这不是正确的方法,因为我无法在父标记的末尾停止迭代以便插入。

任何帮助都将不胜感激!谢谢


Tags: testidchild字典节点tag孩子root
2条回答

python还附带了一个etree API(它没有很好的打印和lxml所具有的一些其他特性):http://docs.python.org/library/xml.etree.elementtree.html

使用lxml库尝试此操作:

from lxml import etree

source = """
<root>
<parent>
    <ID>1</ID>
    <child1>Value1</child1>
    <child2>value11</child2>
    <child3>
       <subchild>value111</subchild>
    </child3>
</parent>
<parent>
    <ID>2</ID>
    <child1>value2</child1>
    <child2>value22</child2>
    <child2>value333</child2>
</parent>
<parent>
    <ID>3</ID>
    <child1>value3</child1>
    <child2>value33</child2>
</parent>
<parent>
    <ID>4</ID>
    <child1>value4</child1>
    <child2>value44</child2>
</parent>
</root>
"""

document = etree.fromstring(source)
inserts = []

id_number = 3

for parent in document.findall('parent'):
    insert = {}
    cont = 0
    for element in parent.iterdescendants():
        if element.tag == 'ID':
            if element.text == str(id_number):
                cont = 1
        if element.getchildren() == []:
            insert[element.tag] = element.text
    if cont:
        inserts.append(insert)

print inserts

相关问题 更多 >

    热门问题