Forum eedomus
https://forum.eedomus.com/

Question Xpath
https://forum.eedomus.com/viewtopic.php?f=18&t=10626
Page 1 sur 1
Auteur:  soundfab [ 31 Mars 2021 13:00 ]
Sujet du message:  Question Xpath

bonjour voici mon XML :

<?xml version="1.0" encoding="ISO-8859-1"?><root><status>docked</status><raw>{"version":1,"reqId":"6064637066b5d","result":"ok","data": {},"error":null,"alert":null,"state":1,"action":0,"cleaning": {"category":2,"mode":2,"modifier":1,"navigationMode":1,"spotWidth":0,"spotHeight":0},"details": {"isCharging":false,"isDocked":true,"isScheduleEnabled":false,"dockHasBeenSeen":false,"charge":100},"availableCommands": {"start":true,"stop":false,"pause":false,"resume":false,"goToBase":false},"availableServices": {"findMe":"basic-1","generalInfo":"basic-1","houseCleaning":"basic-4","IECTest":"advanced-1","logCopy":"basic-1","manualCleaning":"basic-1","maps":"basic-2","preferences":"basic-2","schedule":"basic-2","softwareUpdate":"basic-1","spotCleaning":"basic-3","wifi":"basic-1"},"meta": {"modelName":"BotVacD7Connected","firmware":"4.5.3-189"}}</raw></root>

Je voudrais juste récupérer dans Xpath la valeur du paramètre error , cela est-il possible ?
Merci à tous pour votre aide .
Fab
Auteur:  opa95 [ 31 Mars 2021 13:50 ]
Sujet du message:  Re: Question Xpath

Avec un script, oui sans problème
Il faut récupérer le contenu du champ <raw> qui est en json et le traiter comme tel.
Directement je ne sais pas comment : peut-être en créant un capteur virtuel qui va lire le contenu de raw : xpath ->//raw
puis en relisant la valeur de ce capteur et en disant que c'est du json
Auteur:  merguez07 [ 31 Mars 2021 14:05 ]
Sujet du message:  Re: Question Xpath

bonjour,
oui...avec un xpath à rallonge

substring(substring-after(substring(substring-before(/root/raw,'alert'),0,string-length(substring-before(/root/raw,'alert'))-2),'error'),3)
Auteur:  opa95 [ 31 Mars 2021 14:14 ]
Sujet du message:  Re: Question Xpath

C'est quand même plus sympa quand l'appli renvoie un vrai XML ou un vrai json
Auteur:  KikiFUNstyle [ 31 Mars 2021 16:22 ]
Sujet du message:  Re: Question Xpath

merguez07 a écrit:bonjour,
oui...avec un xpath à rallonge

substring(substring-after(substring(substring-before(/root/raw,'alert'),0,string-length(substring-before(/root/raw,'alert'))-2),'error'),3)

:crazy: :clap:
Auteur:  opa95 [ 31 Mars 2021 16:54 ]
Sujet du message:  Re: Question Xpath

merguez07 a écrit:bonjour,
oui...avec un xpath à rallonge

substring(substring-after(substring(substring-before(/root/raw,'alert'),0,string-length(substring-before(/root/raw,'alert'))-2),'error'),3)

Il me semble qu'il faut plutôt mettre
substring(substring-after(substring(substring-before(/root/raw,'alert'),0,string-length(substring-before(/root/raw,'alert'))-1),'error'),3)
avec -1 au lieu de -2, sinon tu obtiens "nul" au lieu de "null"
Auteur:  soundfab [ 31 Mars 2021 17:26 ]
Sujet du message:  Re: Question Xpath

trop de talents les gars !! merci !!
j'aurai préférer aussi un vrai XML mais l'appli pour aspirateur robot Neato ne le fait pas . mais c 'est deja cool d'en avoir developé une . On fait avec :)

Encore Merci !
Auteur:  opa95 [ 31 Mars 2021 17:36 ]
Sujet du message:  Re: Question Xpath

soundfab a écrit:trop de talents les gars !! merci !!
j'aurai préférer aussi un vrai XML mais l'appli pour aspirateur robot Neato ne le fait pas . mais c 'est deja cool d'en avoir developé une . On fait avec :)

Encore Merci !

Sinon, on peut modifier le php correspondant à l'aspirateur, mais je ne peux pas y accéder car je n'ai pas de compte chez neato
Auteur:  merguez07 [ 31 Mars 2021 18:59 ]
Sujet du message:  Re: Question Xpath

opa95 a écrit:Il me semble qu'il faut plutôt mettre
substring(substring-after(substring(substring-before(/root/raw,'alert'),0,string-length(substring-before(/root/raw,'alert'))-1),'error'),3)
avec -1 au lieu de -2, sinon tu obtiens "nul" au lieu de "null"


effectivement, petite erreur que tu as su corriger ;)
Auteur:  opa95 [ 02 Avr 2021 09:13 ]
Sujet du message:  Re: Question Xpath

Bonjour
soundfab a écrit:trop de talents les gars !! merci !!
j'aurai préférer aussi un vrai XML mais l'appli pour aspirateur robot Neato ne le fait pas . mais c 'est deja cool d'en avoir developé une . On fait avec :)

Encore Merci !

Sinon tu peux modifier le script "neato.php
en remplaçant les lignes 194 à 199 par

echo ('<?xml version="1.0" encoding="ISO-8859-1"?>');
echo ('<root>');
echo ('<status>'.$'status'.'</status>');
echo ('<raw>'.$robotState['status'].'</raw>');
$xml=(jsonToXML($json));
$xml=substr($xml,strpos($xml,'<root>')+6);//longueur de <root>=6
echo ($xml);
sur mon pc ça marche sur l'eedomus aussi, mais je n'ai pu tester que le bout de programme ci-dessus car je n'ai pas de code neato.
Tu a accès ensuite à n'importe quelle valeur, par exemple avec dans xpath
//firmware
tu obtiens bien "4.5.3-189"
Auteur:  opa95 [ 02 Avr 2021 09:18 ]
Sujet du message:  Re: Question Xpath

envoi trop rapide
echo ('<?xml version="1.0" encoding="ISO-8859-1"?>');
echo ('<root>');
echo ('<status>'.$'status'.'</status>');
$xml=(jsonToXML($json));
$xml=substr($xml,strpos($xml,'<root>')+6);//longueur de <root>=6
echo ($xml);

Je n'ai pas laissé la ligne "raw", mais ça marche aussi si tu la laisses (j'ai testé).
Auteur:  soundfab [ 02 Avr 2021 13:57 ]
Sujet du message:  Re: Question Xpath

opa95 a écrit:envoi trop rapide
echo ('<?xml version="1.0" encoding="ISO-8859-1"?>');
echo ('<root>');
echo ('<status>'.$'status'.'</status>');
$xml=(jsonToXML($json));
$xml=substr($xml,strpos($xml,'<root>')+6);//longueur de <root>=6
echo ($xml);

Je n'ai pas laissé la ligne "raw", mais ça marche aussi si tu la laisses (j'ai testé).



Merci pour ton aide !! top !
mais quand je veux sauvegarde , j ai une petite erreur .

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting T_VARIABLE or '$' in neato.php on line 196
Auteur:  opa95 [ 02 Avr 2021 14:06 ]
Sujet du message:  Re: Question Xpath

Envoie-moi la copie des lignes 194 à 198 une fois que tu as fait l'inclusion pour que je voie bien la ligne de l'erreur (196) et les précédentes.
Page 1 sur 1 Le fuseau horaire est UTC+1 heure