繁体   English   中英

在Python中使用etree解析XML

[英]Parsing XML using etree in Python

我查看了文档和其他类似的问题,但无法解决这里出了什么问题!

我想使用API​​的XML输出。

我的XML看起来有点像这样:

<response>
<lst></lst>
<result>
    <doc>
        <str name ="pa">1234</str>
        <str name ="et">Title 1</str>
        <str name ="pb">Publisher 1</str>
        <str name ="ur">http://www.exampleone.com</str>
    </doc>
    <doc>
        <str name ="pa">5678</str>
        <str name ="et">Title 2</str>
        <str name ="pb">Publisher 2</str>
        <str name ="ur">http://www.exampletwo.com</str>
    </doc>
</result>

我想为每个doc元素获取“pa”。

这是我正在使用的代码,但什么都没得到:

import requests
import xml.etree.ElementTree as ET

r = requests.get("api url goes here")

tree = ET.fromstring(r.content)

for doc in tree.findall("doc"):
    pan = doc.find('pa').text
    print pan

我究竟做错了什么?

doc.find('pa')将搜索不存在的pa元素

相反,您需要查找name属性等于pa str元素

doc.find('.//str[@name="pa"]')

演示:

>>> for doc in tree.findall("doc"):
...     pan = doc.find('.//str[@name="pa"]').text
...     print pan
... 
1234
5678

这应该工作......

import xml.etree.ElementTree as ET

resp = '''<response><lst></lst><result><doc>
            <str name ="pa">1234</str>
            <str name ="et">Title 1</str>
            <str name ="pb">Publisher 1</str>
            <str name ="ur">http://www.exampleone.com</str>
          </doc>
          <doc>
            <str name ="pa">5678</str>
            <str name ="et">Title 2</str>
            <str name ="pb">Publisher 2</str>
            <str name ="ur">http://www.exampletwo.com</str>
          </doc></result></response>'''

tree = ET.fromstring(resp)

for pan in tree.findall('.//str[@name="pa"]'):
    print(pan.text)

使用您的代码,它需要进行微小的更改才能工作:

或者:

for doc in tree[1].findall("doc"):
    pan = doc.find('str[@name="pa"]').text
    print (pan)

要么

for doc in tree.findall(".//doc"):
    pan = doc.find('str[@name="pa"]').text
    print (pan)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM