2016-09-06 62 views
0

API请求:http://iss.ndl.go.jp/api/opensearch?isbn=9784334770051如何使用Python解析XML值2.7

我需要从上面通过API提供的XML中获取一个特定值。 我尝试从<item>以及<dc:title>的值中获取所有值,具体为 以下是我当前的代码,尝试从项目中获取所有值但未起作用。

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>不是根元素的直接子,所以你不能直接提到元素(root.find('item'))找到它。您可以在根中使用.//item找到item元素的任何地方:

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

或指定从根到<item>的准确路径:

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

至于寻找<dc:title>元素,请参阅:Parsing XML with namespace in Python via 'ElementTree'

+0

谢谢!我会试试! –

+0

命名空间= {“DC”:根}#添加更多需要 \t打印root.findall(“DC:标题”,命名空间) 我目前正在尝试,但我认为我不理解你所提供的链接。 你给我的代码工作正常。 解析ElementTree需要什么? –

+0

@KeiroKamioka在开头加上'.//',因为我在这个回答中提到过:'root.findall('.// dc:title',namespaces)' – har07