实际上我正在开发一个小项目,需要解析公共可用的XML数据 . 我的目标是将数据写入mysql数据库以进行进一步处理 .
XML结构(示例):
<parkingAreaStatus>
<parkingAreaOccupancy>0.2533602</parkingAreaOccupancy>
<parkingAreaOccupancyTrend>stable</parkingAreaOccupancyTrend>
<parkingAreaReference targetClass="ParkingArea" id="2[Zeil]"
version="1.0"/>
<parkingAreaStatusTime>2018-02-
04T01:30:00.000+01:00</parkingAreaStatusTime
</parkingAreaStatus>
<parkingAreaStatus>
<parkingAreaOccupancy>0.34625</parkingAreaOccupancy>
<parkingAreaOccupancyTrend>stable</parkingAreaOccupancyTrend>
<parkingAreaReference targetClass="ParkingArea" id="5[Dom / Römer]"
version="1.0"/>
</parkingAreaStatus>
使用代码
import csv
import pymysql
import urllib.request
url = "http://offenedaten.frankfurt.de/dataset/912fe0ab-8976-4837-b591-57dbf163d6e5/resource/48378186-5732-41f3-9823-9d1938f2695e/download/parkdatendyn.xml"
from lxml.objectify import parse
from lxml import etree
from urllib.request import urlopen
locations_root = parse(urlopen(url)).getroot()
locations = list(locations_root.payloadPublication.genericPublicationExtension.parkingFacilityTableStatusPublication.parkingAreaStatus.parkingAreaReference)
print(*locations)
我希望获得XML文档中所有“parkingAreaReference”条目的列表 . 不幸的是,清单是空的 .
用一些代码玩arround我得到了只解析第一个块的情绪,我能够通过使用代码填充列表中“parkingAreaReference”id =“2 [Zeil]”块的“parkingAreaOccupancy”值
locations = list(locations_root.payloadPublication.genericPublicationExtension.parkingFacilityTableStatusPublication.parkingAreaStatus.parkingAreaOccupancy)
print(*locations)
-
0.2533602
这不是预期的结果
-
0.2533602 - > 0.34625
我的问题是:
什么是获得矩阵的最佳方法我可以进一步使用所有块包括 . XML文档中声明的相应值?
输出示例:
A = [[ID:2[Zeil],0.2533602,stable,2018-02-
04T01:30:00.000+01:00],[id="5[Dom / Römer],0.34625,stable,2018-02-
04T01:30:00.000+01:00]]
或一般而言
A = [parkingAreaOccupancy,parkingAreaOccupancyTrend,parkingAreaStatusTime,....],[parkingAreaOccupancy,parkingAreaOccupancyTrend,parkingAreaStatusTime,.....]
经过数小时的研究,我希望从您的网站获得一些提示
先感谢您,
TR
1 回答
您可以直接使用
etree
并使用XPath1查询查找有趣的元素 . 需要注意的一件重要事情是,您的XML在根元素处声明了默认名称空间:根据定义,声明默认命名空间的元素和没有前缀的所有后代元素都属于此默认命名空间(除非在其中一个后代元素中找到另一个默认命名空间,而XML不是这种情况) . 这就是我们在下面的代码中定义引用默认名称空间URI的前缀
d
的原因,我们使用该前缀来查找从中获取信息所需的每个元素:以下是上面演示代码的输出 . 您可以将这些信息存储在您喜欢的任何数据结构中,而不是
print
:1)关于XPath的一些参考:
XPath 1.0 spec:XPath 1.0上最值得信赖的参考资料
XPath syntax:Gentler对基本XPath表达式的介绍