And*_*anu 0 python parsing dom 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>
Run Code Online (Sandbox Code Playgroud)
这是我试图解析的代码(基本部分):
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
Run Code Online (Sandbox Code Playgroud)
不幸的是我遇到了一些错误.这是堆栈跟踪:
<class 'xml.parsers.expat.ExpatError'>
('no element found: line 1, column 0',)
no element found: line 1, column 0
Run Code Online (Sandbox Code Playgroud)
作为一个蟒蛇初学者,请你指出问题的根源.
我想你是通过以下方式传递文件句柄:
>>> from xml.dom.minidom import parse
>>> xmldoc = open("xmltestfile.xml", "rU")
>>> x = FuncDoc(xmldoc)
Run Code Online (Sandbox Code Playgroud)
如果我尝试解析同一个文档两次而不关闭它,我会得到同样的错误.试试这个 - 第二次解析后出现错误:
>>> 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
Run Code Online (Sandbox Code Playgroud)
首次解析后,已读取整个文件.然后,新的解析尝试接收0数据.我的猜测是文档被解析两次是你代码中的错误.但是,如果这是你想要做的,你可以重置它xmldoc.seek(0)
.
归档时间: |
|
查看次数: |
9162 次 |
最近记录: |