解析XML并打印符合给定条件的一个子项的属性

解析XML并打印符合给定条件的一个子项的属性,xml,python-3.x,xml-parsing,Xml,Python 3.x,Xml Parsing,我有一个XML响应。我需要提取设备下连接中中local=1的uri属性,标签为product=Plex Media Server,或者简明扼要地说,我需要this.is.what.I.want <?xml version="1.0" encoding="UTF-8"?> <MediaContainer size="5"> <Device name="Cast" product="Plex Media Server" productVersion="1.14.1.

我有一个XML响应。我需要提取
设备下
连接中
local=1
uri
属性,标签为
product=Plex Media Server
,或者简明扼要地说,我需要
this.is.what.I.want

<?xml version="1.0" encoding="UTF-8"?>
<MediaContainer size="5">
  <Device name="Cast" product="Plex Media Server" productVersion="1.14.1.5490-33830be0b" platform="Android" platformVersion="8.0.0" device="SHIELD Android TV" clientIdentifier="" createdAt="" lastSeenAt="" provides="" owned="1" accessToken="" publicAddress="" httpsRequired="1" synced="0" relay="1" dnsRebindingProtection="0" publicAddressMatches="1" presence="1">
    <Connection protocol="https" address="12.34.56.78" port="xxx" uri="this.is.what.i.want" local="1"/>
    <Connection protocol="https" address="91.01.11.21" port="xxx" uri="https://111-111-111-111.863fffffffffffffflf.plex.direct:xxx" local="0"/>
  </Device>
  <Device name="TV" product="Plex for Samsung" productVersion="2.012" platform="Samsung" platformVersion="5.1" device="Samsung TV" clientIdentifier="xxx" createdAt="" lastSeenAt="" provides="client,player,pubsub-player" owned="1" publicAddress="" publicAddressMatches="0" presence="0" accessToken="">
    <Connection protocol="https" address="xx.xx.xx.xx" port="xx" uri="https://222-222-222-222.863ffffffffffffffff.plex.direct:xxx" local="1"/>
    <Connection protocol="https" address="xx.xx.xx.xx" port="xx" uri="https://333-444-555-666.863ffffffffffffffff.plex.direct:xxx" local="0"/>
  </Device>
</MediaContainer>
结果:

https://333-444-555-666.863ffffffffffffffff.plex.direct:xxx
Unable to find uri
Unable to find uri
{'name': 'TV', 'product': 'Plex for Samsung', 'productVersion': '2.012', 'platform': 'Samsung', 'platformVersion': '5.1', 'device': 'Samsung TV', 'clientIdentifier': 'xxx', 'createdAt': '', 'lastSeenAt': '', 'provides': 'client,player,pubsub-player', 'owned': '1', 'publicAddress': '', 'publicAddressMatches': '0', 'presence': '0', 'accessToken': ''}
但是,当我尝试添加一些限定符时,我的代码会崩溃:

tofind = set(['Device/@product'])

for Device in root.findall('Device'):
    for product in tofind:
        node = Device.find('Plex Media Server')
        if node is not None:
            print ('Found uri')
        else:
            print ('Unable to find uri')

print(Device.attrib)
结果:

https://333-444-555-666.863ffffffffffffffff.plex.direct:xxx
Unable to find uri
Unable to find uri
{'name': 'TV', 'product': 'Plex for Samsung', 'productVersion': '2.012', 'platform': 'Samsung', 'platformVersion': '5.1', 'device': 'Samsung TV', 'clientIdentifier': 'xxx', 'createdAt': '', 'lastSeenAt': '', 'provides': 'client,player,pubsub-player', 'owned': '1', 'publicAddress': '', 'publicAddressMatches': '0', 'presence': '0', 'accessToken': ''}
出于某种原因,代码总是打印最后一个设备属性,而不是第一个


非常感谢您的帮助。

您好!你能分享你的日志/记录吗?刚刚分享了,谢谢你的回复!如果你能分享你的解决方案那就太好了。嗨!你能分享你的日志/记录吗?刚刚分享了,谢谢你的回复!如果您能分享您的解决方案,那就太好了。