Forum eedomus http://forum.eedomus.fr/ |
|
syntaxe pour récupérer le contenu xml en xpath http://forum.eedomus.fr/viewtopic.php?f=18&t=10954 |
Page 1 sur 1 |
Auteur: | jluc2808 [ 04 Oct 2021 10:07 ] |
Sujet du message: | syntaxe pour récupérer le contenu xml en xpath |
bonjour , j'ai besoin d'un coup de main pour avoir la syntaxe pour récupérer en xpath le conte d'un xml, je galère avec cela depuis quelque temps et avec les documentations je n'ai pas trouvé le xml :
et xpath doit récupérer la donnée : value pour le type "Production" j'ai tenté : //root/energyDetails/meters/meters[type='Production']/values/meters/value le retour est : Erreur valeur lue vide (j'ai tenté plein d'autres syntaxes, mais visiblement ce ne sont pas les bonnes) merci à une grande âme de m'aider sur le coup. |
Auteur: | merguez07 [ 04 Oct 2021 10:45 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
Salut Jluc2808 utilise le site xmltoolbox la réponse est /root/energyDetails/meters/meters[1]/values/meters/value/ |
Auteur: | jluc2808 [ 04 Oct 2021 11:22 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
@merguez7 merci pour ce tools et la syntaxe cependant je ne peux pas utiliser cela "meters[1]" l'ordre de retour des "type" dans l'array meters est de temps en temps différent, ce qui m'oblige à tester type='Production' et pas meters[1] qui n'est pas toujours le bon y a t il une solution ? |
Auteur: | thrymartin [ 04 Oct 2021 12:06 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
tu peux le tester directement avec eedomus avec ce lien https://secure.eedomus.com/xpath/ et cocher la case "utiliser le résultat XML" pour y copier ton XML et tester ton XPath du coup tu verras que ta syntaxe fonctionne fort bien, 'Production' donne 503, 'SelfConsumption' donne 497 etc. //root/energyDetails/meters/meters[type='gnagnagna']/values/meters/value heu... pas celle de merguez avec le [1] : "ERREUR: Expression xpath invalide" SI ça te donne "valeur lue vide", soit ta valeur n'existe réellement pas à ce moment, à extraire le XML correspondant pour vérifier, soit tu as un doigt qui a dérapé quand tu as copié ton XPath et en tout cas pas il n'a pas dérapé dans ta question, puisque si je copie le XML de ton message et ton XPath de ton message, j'obtient bien 503 dans la page de test eedomus. |
Auteur: | merguez07 [ 04 Oct 2021 13:15 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
effectivement, j'aurais du tester car je faisais une confiance aveugle à xmltoolbox ![]() Du coup la question initiale contenait la bonne réponse ![]() |
Auteur: | jluc2808 [ 04 Oct 2021 13:38 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
yep, my fault, j'avais laissé dans mon script php, un echo $url , qui venait perturber le retour de $response (jsontoxml) dans la partie xml test du xpath effectivement si je vire la scorrie, ma syntaxe fonctionne parfaitement. boudiou ( ![]() merci bien |
Auteur: | opa95 [ 04 Oct 2021 14:13 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
Sinon, si la production reste toujours en tête //value marche très bien et renvoie 503 (testé sur la box) |
Auteur: | jluc2808 [ 04 Oct 2021 14:21 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
malheureusement et c'était bien le problème, l'ordre des "type" change en fonction de je ne sais pas quoi , mais ne reste pas dans le même ordre. c'est la raison pour laquelle je dois qualifier le retour xpath à chaque fois. |
Auteur: | opa95 [ 04 Oct 2021 14:27 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
Si tu veux garder une simplicité d'écriture et la souplesse proposée par Thrymartin tu peux aussi utiliser //meters[type='Production']//value ou //meters[type='SelfConsumption']//value et ça fonctionne bien |
Auteur: | jluc2808 [ 04 Oct 2021 14:45 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
ah yes , ça ca me va bien merci question connexe: j'ai 5 équipements qui sont liés (attachés au même) dans chacun d'eux je suis obligé de mettre un lien url (sinon je ne peux pas sauver) comme c'est le même pour tous, est-ce que ça va s’exécuter 5 fois ou 1 seule (toutes les 15 minutes) ou comment je peux mettre qu'un seul avec des xpath différents ? |
Auteur: | opa95 [ 04 Oct 2021 15:07 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
Bonjour jluc, ça dépend du php que tu appelles, s'il est astucieux il va garder en mémoire le résultat de ta première demande et l'heure de la demande. A l'appel suivant, si la première demande a moins de 15 minutes il va te renvoyer le résultat de la première demande sans appeler le serveur qui te renvoie les données, sinon il va réenvoyer une demande au serveur et la mémoriser avec l'heure de la nouvelle demande; il n'y aura qu'une demande toutes les 15 minutes. Si le php ne fait pas cela, il y aura une demande au serveur à chaque fois (donc 5 demandes). Pour aller plus loin, il me faut le php et la manière dont tu fais tes appels. |
Auteur: | jluc2808 [ 04 Oct 2021 15:25 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
@opa95 merci de ce retour, je comprends que c'est directement dans le script PHP que va se jouer le cache, je pensais (naïvement) que le fait de lier des équipements allait permettre de n'envoyer qu'une seule requête (URL). ce que je comprends c'est que chaque équipement envoi la requête attachée et que le script doit se débrouiller avec. je vais reprendre mon php pour y mettre la fonction cache et le publie dès que c'est fait pour correction et avis. |
Auteur: | thrymartin [ 04 Oct 2021 15:49 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
la fonction "cache" est expliqué dans l'aide de merguez et reprise dans mes eedotrucs et utilisé en fonction primordiale dans le script du plugin mobile alerts (perso j'ai 16 capteurs pour un seul appel, mais on peut en mettre autant qu'on veut), y a quasi plus qu'à recopier... |
Auteur: | jluc2808 [ 04 Oct 2021 16:03 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
mon php revu avec le cache:
|
Auteur: | jluc2808 [ 07 Oct 2021 15:26 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
bonjour, puisque je suis dans les syntaxes y a t il un moyen dans xpath de récupérer la dernière instance d'une array et pas la 1ère, sachant que je ne sais pas combien il va y en avoir. exemple : dans ce xml
je souhaite prendre la dernière valeur de value (celle à 13:00:00) et pas la première comme c'est le cas avec la syntaxe : //meters[type='Purchased']/values/meters/value comme je l'ai dit je ne sais si je vais avoir 1 seule instance de value ou 2 ou même 3. un truc du style //meters[type='Purchased']/values/meters/value[last] si je ne peux pas il va falloir que je décortique ça dans le php, mais pour plein de raison, je ne souhaitais pas le faire, la 1ère était que je souhaitais garder les valeurs de retour jsontoxml intouchées pour pouvoir les exploiter de plusieurs manières avec les équipements associés. merci |
Auteur: | opa95 [ 07 Oct 2021 16:25 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
Bonjour jluc Essaie plutôt cela: //meters[type='Purchased']/values/meters[last()]/value |
Auteur: | jluc2808 [ 07 Oct 2021 19:01 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
génial ça fonctionne au poil merci bien |
Auteur: | thrymartin [ 07 Oct 2021 19:21 ] |
Sujet du message: | Re: syntaxe pour récupérer le contenu xml en xpath |
yep, faut pas mettre ton last avec value, puisque le meters qui vient avant serait le premier s'il n'est pas identifié: il n'y a qu'une seul value après, donc le last() serait celle ci comme c'est après la date ce qui t'importe, c'est le meters juste avant dont tu veux la dernière occurence, donc bien comme te le donne opa95 mais avec un exemple de xml fonctionnel évidemment, et sépare donc tes balises pour le rendre lisible et ça te facilitera largement tes recherches de syntaxe. Ton exemple n'est pas exploitable, reprend ton xml de base et SI les balises de date puis value sont du type (inséré dans ton exemple, au lieu d'une série, ici 3)
alors ça fonctionnera : (pour Purchased) le premier par défaut, ...meters[1]/value ou simplement ...meters/value le dernier avec last ...meters[last()]/value le deuxième ...meters[2]/value |
Page 1 sur 1 | Le fuseau horaire est UTC+1 heure |
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/ |