我正在使用lxml來讀取我的xml文件。我正在使用類似下面的代碼。它適用於lxml2.3 beta1,但如果使用lxml2.3,則會出現zn xml語法錯誤,如下所示。我瀏覽了兩個版本的發行說明,但無法弄清楚可能導致此錯誤的原因或解決方法。如果你遇到過這樣的事情或者有任何線索,請幫助。lxml XMLSyntaxError:未找到命名空間的默認前綴
謝謝!
代碼:
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)
錯誤:
File "iterparse.pxi", line 478, in lxml.etree.iterparse.next (src/lxml/lxml.etree.c:95348) File "iterparse.pxi", line 530, in lxml.etree.iterparse._read_more_events (src/lxml/lxml.etree.c:95886) File "parser.pxi", line 585, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:71955) XMLSyntaxError: Namespace default prefix was not found, line 545, column 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
感謝您的回覆。我在原始文章中添加了xml示例,並編輯了代碼示例以顯示我如何使用名稱空間。我基本上比較元素標籤,以確保它是我所期望的。遇到未知標籤時,我會記錄一個錯誤。但是在這裏,lxml只是拋出錯誤。我檢查了#545行,看看有沒有什麼看起來錯了,但xml看起來很好(它應該可以正常工作,使用lxml 2.3 beta1)。 – Rinks