2011-07-01 37 views
0

私はxmlファイルの要素をループするためにpythonでlxml iterparseを使用しています。ほとんどのXMLではうまく動作しますが、いくつかは失敗します。そのうちの1つに改行がありません。エラーとそのようなXMLのサンプルは以下の通りです。すべての手がかりは?lxml - 改行なしで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 

コード -

+1

コードですか? –

+0

コードサンプルを追加しました。 – Rinks

答えて

2
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) 

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 

PS:そして、あなたはこれで何をすべきかを意味ですか?

DEFメイン(オブジェクト):

+0

回答ありがとう@Pill。実際には、fullFilePathとopen(fullFilePath)の両方が機能します。残念ながら、xmlファイル自体にエラーがありました。そして、私は一連のファイルを持っていたので、正しいファイルの形式を開いて確認しましたが(エラーは次のファイルにあります)、パーサーが間違っていると思いました。 – Rinks

関連する問題