我正在使用 lxml 来读取我的 xml 文件。我正在使用如下代码。它在 lxml2.3 beta1 上工作得很好,但在 lxml2.3 上它给了我 zn xml 语法错误,如下所示。我浏览了两个版本的发行说明,但无法弄清楚是什么导致了此错误或如何修复它。如果您遇到过这样的事情或有任何线索,请提供帮助。
Thanks!!
Code:
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)
Error:
文件“iterparse.pxi”,第 478 行,位于
lxml.etree.iterparse。next(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>
“Employee”在根中重复。错误发生在解析器正确地遍历了许多员工之后。
Edit 1:在捕获异常时,我捕获以下内容:
WARNING:NAMESPACE:NS_ERR_UNDEFINED_NAMESPACE: Namespace default prefix was not found