2012-04-06 3 views
2

ElementTree를 사용하여 XML 파일을 구문 분석하는 작은 함수를 작성했지만 다음과 같은 오류가 발생합니다. "xml.etree.ElementTree.ParseError : 형식이 올바르지 않습니다 (잘못된 토큰) : 줄 1, 열 0 ". 아래의 코드를 발견하시기 바랍니다ElementTree를 사용하여 xml 구문 분석

tree = ElementTree.parse(urllib2.urlopen('http://api.ean.com/ean-services/rs/hotel/v3/list?type=xml&apiKey=czztdaxrhfbusyp685ut6g6v&cid=8123&locale=en_US&city=Dallas%20&stateProvinceCode=TX&countryCode=US&minorRev=12')) 

rootElem = tree.getroot() 

hotel_list = rootElem.findall("HotelList") 
+0

XML 파일의 첫 번째 줄을 보는 것이 유용 할 수 있습니다. 가능한 http://stackoverflow.com/questions/6260144/expaterror-not-well-formed-invalid-token의 중복 – ClassicThunder

답변

6

사용하는 사이트에 여러 문제가있다 : 당신은 어떻게 든 사용

  • 사이트 type=xml을 준수하지 않는 당신이 GET 인수로 보내는 대신 당신은 것입니다, 헤더를 허용 보내 당신이 사이트 콘텐츠 형식을 수락하지 않는

  • JSON 데이터를 반환 다른 XML을 받아 말하는 사이트를 필요 text/xml 그래서 당신은 application/xml

    를 보낼 필요
  • 귀하의 parse 호출이 잘못 대신 parse 그래서 여기에 파일 이름이나 파일 형식 객체

걸리는 작업 코드

import urllib2 
from xml.etree import ElementTree 

url = 'http://api.ean.com/ean-services/rs/hotel/v3/list?type=xml&apiKey=czztdaxrhfbusyp685ut6g6v&cid=8123&locale=en_US&city=Dallas%20&stateProvinceCode=TX&countryCode=US&minorRev=12' 
request = urllib2.Request(url, headers={"Accept" : "application/xml"}) 
u = urllib2.urlopen(request) 
tree = ElementTree.parse(u) 
rootElem = tree.getroot() 
hotel_list = rootElem.findall("HotelList") 
print hotel_list 
, 그것은 데이터를해야한다는 다른 대답에 언급, 올바른

출력 :

[<Element 'HotelList' at 0x248cd90>] 

주 나는을 만드는 오전객체 및 전달 Accept 헤더

btw 사이트가 JSON을 반환하는 이유 XML을 구문 분석해야하는 이유 JSON을 구문 분석하는 것이 더 간단하고 준비된 Python 객체를 얻을 수 있습니다.

+0

감사합니다 Rik Poggi. 그것은 지금 일하고있다 .... – user1118818