首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python minidom解析文档

使用python minidom解析文档
EN

Stack Overflow用户
提问于 2010-09-02 17:46:57
回答 1查看 9.7K关注 0票数 0

我有以下XML文档,我必须使用python的minidom来解析它:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>

<root>
    <bash-function activated="True">
        <name>lsal</name>
        <description>List directory content (-al)</description>
        <code>ls -al</code>
    </bash-function>

    <bash-function activated="True">
        <name>lsl</name>
        <description>List directory content (-l)</description>
        <code>ls -l</code>
    </bash-function>
</root>

下面是我试图解析的代码(关键部分):

代码语言:javascript
复制
from modules import BashFunction
from xml.dom.minidom import parse

class FuncDoc(object):
    def __init__(self, xml_file):
        self.active_func = []
        self.inactive_func = []
        try:
            self.dom = parse(xml_file)
        except Exception as inst:
            print type(inst)
            print inst.args
            print inst

不幸的是,我遇到了一些错误。下面是堆栈跟踪:

代码语言:javascript
复制
<class 'xml.parsers.expat.ExpatError'>
('no element found: line 1, column 0',)
no element found: line 1, column 0

作为一名python初学者,您能告诉我问题的根源吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-02 18:10:16

我假设您正在以以下方式传入一个文件句柄:

代码语言:javascript
复制
>>> from xml.dom.minidom import parse
>>> xmldoc = open("xmltestfile.xml", "rU")
>>> x = FuncDoc(xmldoc)

如果我尝试解析同一文档两次,而没有在其间关闭它,我会得到与您相同的错误。尝试这样做--在第二次解析尝试后出现错误:

代码语言:javascript
复制
>>> xmldoc.close()
>>> xmldoc = open("xmltestfile.xml", "rU")
>>> xml1 = parse(xmldoc)
>>> xml2 = parse(xmldoc)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xml/dom/minidom.py", line 1918, in parse
    return expatbuilder.parse(file)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xml/dom/expatbuilder.py", line 928, in parse
    result = builder.parseFile(file)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/xml/dom/expatbuilder.py", line 211, in parseFile
    parser.Parse("", True)
xml.parsers.expat.ExpatError: no element found: line 1, column 0

在第一次解析之后,整个文件都被读取了。然后,新的解析尝试接收0数据。我的猜测是,文档被解析两次的事实是代码中的一个bug。但是,如果这是你想要做的,你可以用xmldoc.seek(0)重置它。

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

https://stackoverflow.com/questions/3625897

复制
相关文章

相似问题

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