2013-02-17 4 views
0

je suis perdu je veux extraire une valeur de fichier url xml en python j'ai vu qu'il y a beaucoup de bibliothèque mais incapable d'avoir un certain succès.Un autre extrait de python xml

<?xml version="1.0"?> 
<root LoadTime="1360991134" DataVersion="991138826" UserData_DataVersion="991134040" 
TimeStamp="1361131034" ZWaveStatus="1" LocalTime="2013-02-17 14:57:14 D"> 
<Device_Num_82 status="-1"> 
<states> 
<state id="72" service="urn:upnp-org:serviceId:XBMCState1" variable="Port" value="80"> 
</state> 
<state id="73" service="urn:upnp-org:serviceId:XBMCState1" variable="PingInterval"  
value="180"></state> 
<state id="74" service="urn:upnp-org:serviceId:XBMCState1" variable="PingStatus" 
value="up"></state> 
<state id="75" service="urn:upnp-org:serviceId:XBMCState1" variable="IdleTime" 
value="program"></state> 
<state id="76" service="urn:upnp-org:serviceId:XBMCState1" variable="PlayerStatus" 
value="Video_end"></state> 
<state id="77" service="urn:micasaverde-com:serviceId:HaDevice1" variable="CommFailure" 
value="1"></state> 
<state id="78" service="urn:micasaverde-com:serviceId:HaDevice1" variable="LastUpdate" 
value="0"></state> 
<state id="79" service="urn:micasaverde-com:serviceId:HaDevice1" variable="Configured" 
value="0"></state> 
</states> 
<Jobs></Jobs> 
<tooltip display="0"></tooltip> 
</Device_Num_82> 
</root> 

je veux la valeur id = 75 (programme)

Merci

Voici le code

import xml.etree.ElementTree as ET 
import urllib.request 

VERA = 'http://192.168.2.19:3480/data_request?id=status&output_format=xml&DeviceNum=82' 

xml = urllib.request.urlopen(VERA).read() 
tree = ET.fromstring(xml) 
print (tree.find('.//state[@id="75"]').attrib['service']) 
# urn:upnp-org:serviceId:XBMCState1 

Ici l'erreur

Traceback (most recent call last): 
File "/Users/Michael/Desktop/test.py", line 8, in <module> 
print (tree.find('.//state[@id="75"]').attrib['service']) 
AttributeError: 'NoneType' object has no attribute 'attrib' 
+0

Qu'est-ce que vous avez essayé jusqu'à présent? – oefe

+0

Ensuite, aucun noeud 'state' avec un identifiant de" 75 "n'existe ... –

+0

Je sais pourquoi maintenant, je vérifie avec le navigateur et chaque fois que je réfrèfe le changement d'id. est-il un moyen de vérifier la variable IdleTime à la place – user2052746

Répondre

0

xml est un stri ng de vos données, puis en utilisant lxml, vous pouvez le faire:

import lxml.etree as ET 

tree = ET.fromstring(xml) 
print tree.xpath('//state[@id="75"]/@service') 
# ['urn:upnp-org:serviceId:XBMCState1'] 

Vous pouvez également effectuer les opérations suivantes en utilisant la bibliothèque xml builtin:

import xml.etree.ElementTree as ET 

tree = ET.fromstring(xml) 
print tree.find('.//state[@id="75"]').attrib['service'] 
# urn:upnp-org:serviceId:XBMCState1 
+0

Le python est pour xbmc addon donc existe-t-il une méthode standard sans installer une autre bibliothèque ou existe-t-il un moyen d'inclure la bibliothèque avec le script python? – user2052746

+0

@ user2052746 fait une modification en utilisant la bibliothèque 'xml' intégrée avec Python –

+0

Voici mon code: fefe – user2052746