【发布时间】:2017-04-16 19:36:32
【问题描述】:
在过去的两周里,我一直在尝试打开和关闭它,并查看 python 的文档以进行 XML 解析。我仍然可以弄清楚它是否是 Xpath 的东西。如果有人能提供一些帮助,我将不胜感激。
我的 XML 文件有很多子文件,我正在使用 root.findall() 来获取 myAccessPoints 的属性,然后在它下面的三个子文件中我有一个元素,其中包含我想要提取的多个属性。但是,到目前为止,我只能使用 2 个 for 循环来做到这一点。
import xml.etree.ElementTree as ET
def apData():
tree = ET.parse("project.xml")
root = tree.getroot()
for topLevels in root.findall("./myAccessPoints//*[@id]"):
myApId = topLevels.get('id')
print("AP:%s" % myApId)
print()
#return myApId
for radio in root.findall("./accessPoints/accessPoint/radio/*"):
rChannel = radio.get('primaryNumber')
rMac = radio.get('mac')
rSsid = radio.get('primaryNumber')
print(rChannel, rMac, rSsid)
#return rChannel, rMac, rSsid
以下是 XML 文件的示例:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<maps>
<map id="0" name="floorplan" pixelsPerMeter="47.808212118953044" type="fspl"/>
</maps>
<accessPoints>
<accessPoint id="0" userDefinedPosition="false">
<radio type="measured">
<accessPointMeasurement mac="a0:63:91:21:c4:f8" ssid="Eggs" primaryNumber="7" primaryFrequencyMhz="2442" centerNumber="7" bandwidthMhz="20" security="WPA2" informationElements="000445676773010882840b162430486c0301072a01042f010430140100000fac040100000fac040100000fac020c0032040c1218602d1afc181fffff0000000000000000000000000000000000000000003d16070017000000000000000000000000000000000000004a0e14000a002c01c8001400050019007f0101dd890050f204104a0001101044000102103b00010310470010177b8b3ae292d7c44b93d4616ff30e7e1021000d4e4554474541522c20496e632e1023000a574e44523334303076331024000a574e44523334303076331042000230311054000800060050f20400011011000a574e4452333430307633100800020004103c0001031049000600372a000120dd090010180204f0040000dd180050f2020101800003a4000027a4000042435e0062322f00">
<technologies>
<technology band="802.11g"/>
<technology band="802.11b"/>
<technology band="802.11n"/>
</technologies>
</accessPointMeasurement>
</radio>
</accessPoint>
<accessPoint id="1" userDefinedPosition="false">
最终我会像这样使用接入点元素属性 -->
接入点标识
accessPointMeasurement mac、ssid、primaryNumber
技术乐队
技术乐队
技术乐队
一些 accessPoint 元素有 2 组无线电,所以我必须获得两次 accessPointMeasurement 属性。
我想我必须创建一个类,并且在该类中我必须在自己内部制作列表或字典。
除了了解如何在一个 for 循环中获取每个接入点及其属性(如果可能的话)之外,我并没有要求任何人为我做任何事情。
感谢您的帮助。
【问题讨论】:
标签: python python-3.x parsing xpath xml-parsing