我在python中使用lxml iterparse循环遍历xml文件中的元素。它适用于大多数xmls,但有些失败。其中一个没有换行符。错误和这种xml的样本如下。有线索吗?
谢谢!
<root><person><name>"xyz"</name><age>"10"</age></person><person><name>"abc"</name><age>"20"</age></person></root>
错误 -
XMLSyntaxError: Document is empty, line 1, column 1
代码 -
from lxml import etree
def parseXml(context,elemList):
for event, element in context:
if element.tag in elemList:
#read text and attributes is any
element.clear()
def main(object):
elemList= ['name','age','id']
context=etree.iterparse(fullFilePath, events=("start","end"))
parseXml(context,elemList)
答案 0 :(得分:2)
etree.iterparse期望缓冲区用于源参数。你传递的变量名称“fullFilePath”告诉我它不是文件(所以解析器试图解析文件内容的file_path)。 尝试传递打开的文件。
context=etree.iterparse(open(fullFilePath), events=("start","end"))
或字符串:
from lxml import etree
xml = '<root><person><name>"xyz"</name><age>"10"</age></person><person><name>"abc"</name><age>"20"</age></person></root>\n'
def parseXml(context,elemList):
for event, element in context:
if element.tag in elemList:
print element.tag,
element.clear()
def main():
elemList= ['name','age','id']
context=etree.iterparse(StringIO(xml), events=("start","end"))
parseXml(context,elemList)
main()
>>>name name age age name name age age
PS:那你的意思是什么?
def main(object):