Edu*_*scu 2 python xml minidom xml-parsing python-2.7
标准安装提供的python中有很多方法可以处理XML,甚至更多的是外部包,请参阅http://wiki.python.org/moin/PythonXml.
对于我使用的项目minidom,它可以满足我的需求,但错误报告相当于电报,例如:
no element found: line 7, column 0
Run Code Online (Sandbox Code Playgroud)
这是正确的但不是非常人性化的,也没有暗示可能需要哪个元素.由于缺乏信息,我无法向用户报告错误.
这只是一个例子,但有更多情况下minidom可能更详细但不是.所以我需要一些详细的,一个足够详细的错误,我可以将解析错误传递给用户.
用于解析的xml文件,在代码中按原样使用config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<widget xmlns="http://www.w3.org/ns/widgets">
<icon src="icon.png"/>
<content src="index.html"/>
<name>sample</name>
Run Code Online (Sandbox Code Playgroud)
我尝试对上面链接中的所有解析器进行调查,看看哪一个有最有用的错误报告,我停在了lxml:
import xml.dom.minidom as md
md.parse("config.xml")
#xml.parsers.expat.ExpatError: no element found: line 7, column 0
import elementtree.ElementTree as ET
tree = ET.parse("config.xml")
#xml.parsers.expat.ExpatError: no element found: line 7, column 0
from xml import sax
parser = sax.make_parser()
parser.parse("config.xml")
#xml.sax._exceptions.SAXParseException: config.xml:7:0: no element found
import xml.etree.cElementTree as et
et.parse("config.xml")
#cElementTree.ParseError: no element found: line 7, column 0
import xml.dom.pulldom as pd
doc = pd.parse("config.xml")
for event, node in doc:
print event, node
#xml.sax._exceptions.SAXParseException: <unknown>:7:0: no element found
import lxml.etree
tree = lxml.etree.parse("config.xml")
#lxml.etree.XMLSyntaxError: Premature end of data in tag widget line 2, line 7, column 1
Run Code Online (Sandbox Code Playgroud)
结论是lxml库具有以上列表中最好的错误报告:
"Premature end of data in tag widget line 2, line 7, column 1"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
979 次 |
| 最近记录: |