2016-09-06 6 views
0

API 요청을 XML 값을 I 구문 분석 방법은 다음과 같습니다 http://iss.ndl.go.jp/api/opensearch?isbn=9784334770051파이썬 2.7

나는 위의 API를 통해 제공되는 XML에서 하나 개의 특정 값을 얻을 필요가있다. <item>에서 모든 값을 얻으려고 시도하고 특히 <dc:title>의 값을 다음과 같이 보겠습니다. 다음은 현재 사용중인 코드로 항목에서 모든 값을 가져 오려고했지만 작동하지 않았습니다. 직접 요소 (root.find('item'))를 언급하여 찾을 수 있도록

import codecs 
import sys 
import urllib 
import urllib2 
import re, pprint 
from xml.etree.ElementTree import * 
import csv 
from xml.dom import minidom 
import xml.etree.ElementTree as ET 

errorCheck = "0" 
isbn = raw_input("Enter IBSN Number Please ") 
isIsbn = len(isbn) 


if isIsbn == 10 or isIsbn == 13: 
    errorCheck = 1; 

    url = "http://iss.ndl.go.jp/api/opensearch?isbn=%s" % isbn 
    req = urllib2.Request(url) 

    response = urllib2.urlopen(req) 
    XmlData = response.read() 
    root = ET.fromstring(XmlData) 

    print(root.tag,root.attrib) 

    for child in root.find('item'): 
     print child.tag 
     print child.attrib 
     print child.text 

if errorCheck == "0": 
    print "It is not ISBN" 
+0

요소 나무하지만 모든 키가 고유해야합니다! 더 많은 XML 파일이 완전한 품질의 데이터 패턴을 가지고 있지 않기 때문에 문자열로 분석하십시오. – dsgdfg

답변

1

<item> 루트 요소의 직접적인 아이가 아닙니다. 당신은 루트에서 item 요소 어디서나 찾을 .//item를 사용할 수 있습니다

for child in root.find('.//item'): 

또는 정확한 <item> 루트에서 경로 지정 <dc:title> 요소를 찾는으로

for child in root.find('channel/item'): 

를 참조하십시오 Parsing XML with namespace in Python via 'ElementTree'

+0

고맙다! 나는 그것을 시험해 본다! –

+0

namespaces = { 'dc': root} # 필요에 따라 더 추가 \t 인쇄 root.findall ('dc : title', namespace) 현재 시도하고는 있지만 사용자가 제공 한 링크를 이해하지 못한다고 가정합니다. 코드는 잘 작동합니다. ElementTree를 파싱 할 때 필요한 것은 무엇입니까? –

+0

@KeiroKamioka 시작 부분에'.//'을 추가하십시오. 이유는이 답변에서 언급했기 때문입니다 :'root.findall ('dc : title', namespace)' – har07