【问题标题】:Parsing XML with Python - namespaces使用 Python 解析 XML - 命名空间
【发布时间】:2018-07-15 23:35:16
【问题描述】:

我想处理开放数据,xml存储在这里:

http://offenedaten.frankfurt.de/dataset/912fe0ab-8976-4837-b591-57dbf163d6e5/resource/48378186-5732-41f3-9823-9d1938f2695e/download/parkdatendyn.xml

在这个论坛的帮助下,我编写了代码

from lxml import etree
from urllib.request import urlopen


root = etree.parse(urlopen(url)).getroot()


ns = { 'd': 'http://datex2.eu/schema/2/2_0' }

parking_area = root.xpath('//d:parkingAreaStatus', namespaces=ns)
parking_facility = root.xpath('//d:parkingFacilityStatus', namespaces=ns)

for pa in parking_area:
    area_ref = pa.find('d:parkingAreaReference', ns)
    ParkingspaceList.append(str((area_ref.get('id'))))


for pf in parking_facility:
    facility_ref = pf.find('d:parkingFacilityReference', ns)
    ParkingspaceList.append(str((facility_ref.get('id'))))

这似乎适用于“pa”,但对于“pf”我收到一条失败消息:

ParkingspaceList.append(str((facility_ref.get('id')))) AttributeError: 'NoneType' 对象没有属性 'get'

有什么建议吗?

最好的问候

TR

【问题讨论】:

    标签: python xml parsing lxml elementtree


    【解决方案1】:

    在同名的parkingFacilityStatus元素中还有parkingFacilityStatus元素,比较混乱:

    <parkingFacilityStatus>
        …
        <parkingFacilityReference targetClass="ParkingFacility" id="24278[Karstadt]" version="1.0"/>
        <parkingFacilityStatus>closed</parkingFacilityStatus>
        …
    </parkingFacilityStatus>
    

    这是

        <parkingFacilityStatus>closed</parkingFacilityStatus>
    

    给出错误,因为该元素没有 parkingFacilityReference 子元素。

    使用

    for pf in parking_facility:
        facility_ref = pf.find('d:parkingFacilityReference', ns)
        if facility_ref is not None:
            ParkingspaceList.append(str((facility_ref.get('id'))))
    

    它有效。

    【讨论】:

    • @theamokdog 很高兴它有帮助!
    猜你喜欢
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 2014-01-10
    • 2010-11-08
    • 2012-06-11
    相关资源
    最近更新 更多