【发布时间】:2011-06-28 18:35:52
【问题描述】:
我正在使用 lxml 来读取我的 xml 文件。我正在使用类似下面的代码。它适用于 lxml2.3 beta1,但对于 lxml2.3,它会给我 zn xml 语法错误,如下所示。我浏览了这两个版本的发行说明,但无法弄清楚可能导致此错误的原因或如何修复它。如果您遇到这样的事情或对此有任何线索,请提供帮助。
谢谢!!
代码:
from lxml import etree
def parseXml(context,attribList,elemList):
for event, element in context:
if element.tag in elemList:
#read element attributes
element.clear()
def main(object):
ns='{NS}'
attribList=['name','age','id']
elemList=[ns+'Employee',ns+'Experience',ns+'Employment',ns+'Project',ns+'Award']
context=etree.iterparse(fullFilePath, events=("start","end"))
parseXml(context,attribList,elemList)
错误:
文件“iterparse.pxi”,第 478 行,在 lxml.etree.iterparse.下一步 (src/lxml/lxml.etree.c:95348) 文件 “iterparse.pxi”,第 530 行,在 lxml.etree.iterparse._read_more_events (src/lxml/lxml.etree.c:95886) 文件 “parser.pxi”,第 585 行,在 lxml.etree._raiseParseError (src/lxml/lxml.etree.c:71955) XMLSyntaxError:命名空间默认值 未找到前缀,第 545 行,列 73
xml 示例 -
<root xmlns='NS'>
<Employee Name="Mr.ZZ" Age="30">
<Experience TotalYears="10" StartDate="2000-01-01" EndDate="2010-12-12">
<Employment id = "1" EndTime="ABC" StartDate="2000-01-01" EndDate="2002-12-12">
<Project Name="ABC_1" Team="4">
</Project>
</Employment>
<Employment id = "2" EndTime="XYZ" StartDate="2003-01-01" EndDate="2010-12-12">
<PromotionStatus>Manager</PromotionStatus>
<Project Name="XYZ_1" Team="7">
<Award>Star Team Member</Award>
</Project>
</Employment>
</Experience>
</Employee>
</root>
“员工”在根中重复。错误发生在解析器正确地通过了许多员工之后。
编辑 1: 在捕获异常时,我捕获了以下内容:
WARNING:NAMESPACE:NS_ERR_UNDEFINED_NAMESPACE: Namespace default prefix was not found
【问题讨论】: