2017-01-12 11 views
-2

XMLファイルからいくつかのデータを抽出しようとしていて、その情報でExcelを作成しようとしています。xmlからExcel(Python 2.7)にデータを抽出

XMLファイル:

<UniversalTransaction> 
    <TransactionInfo> 
     <DataContext> 
      <DataSourceCollection> 
       <DataSource> 
        <Type>AccountingInvoice</Type> 
        <Key>AR INV 00001006</Key> 
       </DataSource> 
      </DataSourceCollection> 

      <Company> 
       <Code>DCL</Code> 
       <Country> 
        <Code>CL</Code> 
        <Name>Chile</Name> 
       </Country> 
       <Name>Your Chile Corp</Name> 
      </Company> 
...etc 

それから私は、2.7

import xml.etree.ElementTree as ET 
import xlwt 
from datetime import datetime 

tree = ET.parse('ar.xml') 
root = tree.getroot() 

#extract xml 
invoice = root.findall('DataSource') 
arinv = root.find('Key').text 
country = root.findall('Company') 
ctry = root.find('Name').text 

wb = xlwt.Workbook() 
ws = wb.add_sheet('A Test Sheet') 

ws.write(0, 0, arinv) 
ws.write(0, 1, ctry) 

wb.save('example2.xls') 

pythonでこのコードを作ったしかし、私はこのエラーを取得:

arinv = root.find('Key').text 
'NoneType' object has no attribute 'text' 

を、私はそれは同じになります推測しますwith

私はこの

for ar in root.findall('DataContext'): 
    nro = [] 
    ctry = [] 
    inv = ar.find('Key').text 
    nro.append(inv) 
    country = ar.find('Name').text 
    ctry.append(country) 

にコードの「XMLを抽出」の部分を変更すると

はまた、私は次のエラーを取得:再び

ws.write(0, 0, arinv) 
name 'arinv' is not defined 

を、私はCTRY」との同じことを推測します「

のWindows 10、パイソン2.7

私は任意のヘルプ、感謝をapreciateます。

答えて

0

文脈コードの束なしで、短くした質問をすることをお勧めします。たぶん正確な短い質問を分割しようとすると、あなた自身が解決策を見つけられるでしょう。

文書によれば、Element.findは、基本的に直接の子供にのみ見いだされます。あなたは

root.findall('.//Key')[0].text 

のようないくつかのXPath(ドキュメントでXPath式について見て)使用する必要があります(キーが常に存在を前提に与えられたが、文書内のテキストやユニークが含まれています。つまり、検証なし)

+0

いただき、ありがとうございます答え、フィトンの詳細を調べるために何かを助けてください。私のコードは、トップレベルが ''であるときに子供から情報を抽出しますが、オリジナルにはURL そしてそのトップレベルのコードでは、コードを抽出できません。単にリストの範囲外です。 –

+0

はい、文書が(xmlns'を介して)名前空間を定義する場合は、 xpath 'root.findall( '.// {http://www.name.com/Sche/Unive/2011/11} Key')[0] .text'に移動します。または、名前空間プレフィックス辞書に第2引数 'root.findall( '。myprefix:Key'、{'myprefix': 'http://www.name.com/Sche/Unive/2011/11'}) 0] .text' –

+0

それは動作します、ありがとう! –

関連する問題