lxml - 解析一个没有换行符的xml

时间:2011-07-01 17:54:11

标签: python lxml

我在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) 

1 个答案:

答案 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):