首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python复合xml2dict

python复合xml2dict
EN

Stack Overflow用户
提问于 2016-02-09 11:22:06
回答 1查看 2.3K关注 0票数 1

我有一个庞大而复杂的xml文档,我想把它解析成字典(然后再解析成一个带有sqlalchemy的数据库)。我想在这个任务中使用xmltodict

但是,似乎xmltodict不能直接解析嵌套的xml。

我的MWE:

test.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<ns1:tag-1>
    <ns2:tag-2 attrib1="value" attrib2="value">
        <ns3:tag-3 attrib3="value">blabla</ns3:tag-3>
    </ns2:tag-2>
</ns1:tag-1>

test.py

代码语言:javascript
复制
import xmltodict as x2d
with open('ESCIDOC_test.xml', encoding='utf-8') as purein:
    doc = x2d.parse(purein.read())
print(doc['ns1:tag-1']['ns2:tag-2']['@attrib2'])  # works
print(doc['ns1:tag-1']['ns2:tag-2']['ns3:tag-3']['#text'] # does not work, TypeError
ns3tree = doc['ns1:tag-1']['ns2:tag-2']['ns3:tag-3'] 
print(ns3tree['#text'])  # works

为什么我需要首先将它赋值给一个新变量,才能使它工作呢?无论如何,整个xml都被解析了,不是吗?

代码语言:javascript
复制
print(doc)
# OrderedDict([('ns1:tag-1', OrderedDict([('ns2:tag-2', OrderedDict([('@attrib1', 'value'), ('@attrib2', 'value'), ('ns3:tag-3', OrderedDict([('@attrib3', 'value'), ('#text', 'blabla')]))]))]))])

这是因为可能存在内存问题吗?有更优雅的解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-09 21:11:59

你省略了闭幕式)在不工作的行上。

我使用python3.5,复制您的文件,但添加了关闭),并将ESCIDOC_test.xml更改为test.xml。运行它,所有三个打印语句都正常工作(没有TypeError)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35290755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档