0

Python の minidom を使用して解析する必要がある次の XML ドキュメントがあります。

<?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>

解析しようとしているコード (重要な部分) は次のとおりです。

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

残念ながら、いくつかのエラーが発生しています。スタックトレースは次のとおりです。

<class 'xml.parsers.expat.ExpatError'>
('no element found: line 1, column 0',)
no element found: line 1, column 0

Python初心者として、問題の根本を教えてください。

4

1 に答える 1

7

次の方法でファイルハンドルを渡していると思います。

>>> from xml.dom.minidom import parse
>>> xmldoc = open("xmltestfile.xml", "rU")
>>> x = FuncDoc(xmldoc)

同じ文書を途中で閉じずに 2 回解析しようとすると、あなたと同じエラーが発生します。これを試してください -- 2 回目の解析試行後にエラーが表示されます。

>>> 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 データを受け取ります。私の推測では、ドキュメントが 2 回解析されるという事実は、コードのバグです。ただし、それがやりたい場合は、 でリセットできますxmldoc.seek(0)

于 2010-09-02T10:10:15.900 に答える