lxml - 解析没有换行的XML
我在用Python的lxml库里的iterparse功能来遍历我的XML文件中的元素。大部分的XML文件都能正常处理,但有些文件就不行。其中一个文件没有换行符。下面是错误信息和一个这样的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)
1 个回答
2
etree.iterparse 这个函数需要一个缓冲区作为输入参数。而你传入的变量名 "fullFilePath" 让我觉得它不是一个文件(所以解析器试图解析的是文件路径,而不是文件内容)。
试着传入一个已经打开的文件吧。
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
顺便问一下,你说的这个是什么意思呢?
def main(object):