2016-10-04 14 views
0

は私のXML出力です:XMLから特定の情報を抽出する(Googleの距離行列API)

<DistanceMatrixResponse> 
<status>OK</status> 
<origin_address> 
868-978 Middle Tennessee Blvd, Murfreesboro, TN 37130, USA 
</origin_address> 
<destination_address> 
980-1060 Middle Tennessee Blvd, Murfreesboro, TN 37130, USA 
</destination_address> 
<row> 
<element> 
<status>OK</status> 
<duration> 
<value>19</value> 
<text>1 min</text> 
</duration> 
<distance> 
<value>154</value> 
<text>0.1 mi</text> 
</distance> 
</element> 
</row> 
</DistanceMatrixResponse> 

私は(この部分は完了している)、ローカルにウェブからこのXMLを保存するためのPythonを使用しようとしています。ファイルが保存された後、 'duration'の値(この場合は19)と 'distance'の値(この場合は154)を抽出します。

このXMLから必要な情報を読み込んで抽出する方法がわかりません。私はElementTreeで作業を試み、stackoverflowから他のソリューションを実装しようとしています。私は迅速なプロセスでなければならないものに約3時間です。

import urllib2 
import xml.etree.ElementTree as ET 

## import XML and save it out 
url = "https://maps.googleapis.com/maps/api/distancematrix/xml?units=imperial&origins=35.827581,-86.394077&destinations=35.827398,-86.392381&key=mygooglemapsAPIkey" 
s = urllib2.urlopen(url) 
contents = s.read() 
file = open("export.xml", 'w') 
file.write(contents) 
file.close() 
## finish saving the XML 


element_tree = ET.parse("export.xml") 
root = element_tree.getroot() 
agreement = root.find("duration").text 
print agreement 


## open XML and save out travel time in seconds 
xmlfile = 'export.xml' 
element_tree = ET.parse(xmlfile) 
root = element_tree.getroot() 
agreement = root.findall("duration").text 
print agreement 

現在のエラーメッセージは次のとおりです:はAttributeError:それが今座っているとしてここで

は私のコードである「Nonetype」オブジェクトには、属性「テキスト」

私はコードは両方をつかむために不完全である知っているがありません時間と距離が、私はちょうどこの時点で何か作業をしようとしています!

答えて

0

だけXPath queriesを使用します。http://zvon.org/comp/r/tut-XPath_1.html

duration = tree.find('.//duration/value').text 
distance = tree.find('.//distance/value').text 

はここで素敵なXPathのチュートリアルです。

+0

これが鍵でした!そんなにありがとう、私はこの仕事をしようとするにはあまりにも多くの時間を費やしました。 – Jonathan

+0

@Jonathan、私は自分のコードを簡略化しました。ドキュメントに 'duration'や' distance'という値が1つしかないと '.findall'を使う必要はありません。 – skovorodkin

+0

はい、それも良いですね。 Google Maps Distance Matrix APIからの出力は非常に簡単なので、.findall()は過剰です。再度、感謝します!! – Jonathan

関連する問題