2010-09-02 25 views
0

我有,我有使用Python的minidom命名解析下面的XML文檔:與Python的minidom解析文檔

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

作爲一個蟒蛇初學者,請你指點我的問題的根源。

+0

你怎麼稱呼FuncDoc?這個例子實際上對我很好(至少沒有例外) – 2010-09-02 10:03:13

+0

-1因爲我沒有提供信息 – 2010-09-02 11:13:40

+0

@Ivan van der Wijk,可能是因爲我在電腦前24/24。我也沒有考慮這方面的重要。我想我調用FuncDom的Constructor非常合乎邏輯。 – 2010-09-02 15:40:34

回答

6

我想你傳遞一個文件句柄,以下列方式:

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

我得到了同樣的錯誤,你怎麼做,如果我嘗試解析同一文檔的兩倍,但不關閉它在 - 之間。試試這個 - 的解析嘗試後出現的錯誤:

>>> 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數據。我的猜測是,文檔被解析兩次的事實是你的代碼中的一個錯誤。但是,如果這是您想要執行的操作,則可以使用xmldoc.seek(0)進行重置。

+0

要將文件光標恢復到開始位置,請使用'xmldoc.seek(0)'。 – katrielalex 2010-09-02 13:16:13

+0

謝謝,好主意添加這個,我做了。 – chryss 2010-09-02 15:55:08

+0

感謝您的回答。問題是我不應該關閉()文件對象。 – 2010-09-02 16:34:21