|
Recherce et Modification valeur XML |
Débuté par LammariOm, 18 juin 2021 00:15 - 10 réponses |
| |
| | | |
|
| |
Membre enregistré 6 messages Popularité : +1 (1 vote) |
|
Posté le 18 juin 2021 - 00:15 |
Bonjour après plusieurs jours de recherches pour m'initier a la manipulation des fichiers xml avec windev je me retrouve vraiment au point zéro et j'ai toujours rien pigé au fonctionnement du parcours ou surtout de la recherche, dans mon cas je voudrais chercher la section qui affiche "Folder_Depot" ( j'arrive toujours pas a savoir si c'est une balise ou un attribut dans cet xml ) dans un xml avec une syntaxe un peu complexe a ce que j'ai vu avant. donc trouver la section "Folder_Depot" et modifier la valeur "value" qui de cette section, voici l'xml et sa syntaxe pour avoir une idée :
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > <section name="application.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> </sectionGroup> </configSections> <userSettings> <application.My.MySettings> <setting name="REGION" serializeAs="String"> <value>34</value> </setting> <setting name="CODEP" serializeAs="String"> <value /> </setting> <setting name="OFFICE" serializeAs="String"> <value>LAMMARI</value> </setting> <setting name="FTP_CASA" serializeAs="String"> <value>127.0.0.1</value> </setting> <setting name="Centre" serializeAs="String"> <value>23400</value> </setting> <setting name="Folder_Depot_CHIFA" serializeAs="String"> <value>D:\</value> </setting> <setting name="DEPOT_BRD" serializeAs="String"> <value>home2</value> </setting> </application.My.MySettings> </userSettings> </configuration>
merci pour toute aide sur ce probleme. |
| |
| |
| | | |
|
| | |
| |
Posté le 18 juin 2021 - 11:10 |
Dans son message précédent, LammariOm a écrit :
Bonjour après plusieurs jours de recherches pour m'initier a la manipulation des fichiers xml avec windev je me retrouve vraiment au point zéro et j'ai toujours rien pigé au fonctionnement du parcours ou surtout de la recherche, dans mon cas je voudrais chercher la section qui affiche "Folder_Depot" ( j'arrive toujours pas a savoir si c'est une balise ou un attribut dans cet xml ) dans un xml avec une syntaxe un peu complexe a ce que j'ai vu avant. donc trouver la section "Folder_Depot" et modifier la valeur "value" qui de cette section, voici l'xml et sa syntaxe pour avoir une idée : <?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > <section name="application.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> </sectionGroup> </configSections> <userSettings> <application.My.MySettings> <setting name="REGION" serializeAs="String"> <value>34</value> </setting> <setting name="CODEP" serializeAs="String"> <value /> </setting> <setting name="OFFICE" serializeAs="String"> <value>LAMMARI</value> </setting> <setting name="FTP_CASA" serializeAs="String"> <value>127.0.0.1</value> </setting> <setting name="Centre" serializeAs="String"> <value>23400</value> </setting> <setting name="Folder_Depot_CHIFA" serializeAs="String"> <value>D:\</value> </setting> <setting name="DEPOT_BRD" serializeAs="String"> <value>home2</value> </setting> </application.My.MySettings> </userSettings> </configuration> merci pour toute aide sur ce probleme.
bonjour,
pour info : - value est une balise - setting est une balise - name et serializeAs sont des attributs de setting
avez-vous regardé les requêtes XPath ?
-- Cordialement JeAn-PhI |
| |
| |
| | | |
|
| | |
| |
Posté le 18 juin 2021 - 13:56 |
si tout ce que tu as à faire dans le xml c'est "trouver la section "Folder_Depot" et modifier la valeur "value" qui de cette section", n'oublie pas que tout xml est simplement une CHAINE...
Donc, position de "Folder_Depot_" à partir du début, position de <value> à partir de la, position de </value> à partir de la, et tu sais exactement ou est ta valeur à modifier
De la, gauche de ce qui est avant, + nouvelle valeur + droite de ce qui est après, et ton xml est modifié sans utiliser quoi que ce soit de la "logique" xml que tu ne comprend pas...
ca doit faire pas plus de 10 lignes de code, tout ca |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 6 messages Popularité : +1 (1 vote) |
|
Posté le 18 juin 2021 - 18:17 |
JeAn-PhI a écrit :
Dans son message précédent, LammariOm a écrit : Bonjour après plusieurs jours de recherches pour m'initier a la manipulation des fichiers xml avec windev je me retrouve vraiment au point zéro et j'ai toujours rien pigé au fonctionnement du parcours ou surtout de la recherche, dans mon cas je voudrais chercher la section qui affiche "Folder_Depot" ( j'arrive toujours pas a savoir si c'est une balise ou un attribut dans cet xml ) dans un xml avec une syntaxe un peu complexe a ce que j'ai vu avant. donc trouver la section "Folder_Depot" et modifier la valeur "value" qui de cette section, voici l'xml et sa syntaxe pour avoir une idée : <?xml version="1.0"encoding="utf-8"?> <configuration> <configSections> <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <section name="application.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser"requirePermission="false"/> </sectionGroup> </configSections> <userSettings> <application.My.MySettings> <setting name="REGION"serializeAs="String"> <value>34</value> </setting> <setting name="CODEP"serializeAs="String"> <value/> </setting> <setting name="OFFICE"serializeAs="String"> <value>LAMMARI</value> </setting> <setting name="FTP_CASA"serializeAs="String"> <value>127.0.0.1</value> </setting> <setting name="Centre"serializeAs="String"> <value>23400</value> </setting> <setting name="Folder_Depot_CHIFA"serializeAs="String"> <value>D:\</value> </setting> <setting name="DEPOT_BRD"serializeAs="String"> <value>home2</value> </setting> </application.My.MySettings> </userSettings> </configuration> merci pour toute aide sur ce probleme. bonjour, pour info : - value est une balise - setting est une balise - name et serializeAs sont des attributs de setting avez-vous regardé les requêtes XPath ? -- Cordialement JeAn-PhI
Non j'ai pas encore eu l'occasion de rencontrer des exemples avec xpath. J'ai utilisé une procédure de parcours déjà fournie dans l'un des exemples, et j'ai fait avec, je posterais tt à l'heure le code que j'ai rajouté, merci beaucoup. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 6 messages Popularité : +1 (1 vote) |
|
Posté le 18 juin 2021 - 18:20 |
Argus a écrit :
si tout ce que tu as à faire dans le xml c'est "trouver la section "Folder_Depot" et modifier la valeur "value" qui de cette section", n'oublie pas que tout xml est simplement une CHAINE...
Donc, position de "Folder_Depot_" à partir du début, position de <value> à partir de la, position de </value> à partir de la, et tu sais exactement ou est ta valeur à modifier
De la, gauche de ce qui est avant, + nouvelle valeur + droite de ce qui est après, et ton xml est modifié sans utiliser quoi que ce soit de la "logique" xml que tu ne comprend pas...
ca doit faire pas plus de 10 lignes de code, tout ca
Non ce n'est pas possible justement, sa position dans le fichier change selon le poste de l'utilisateur c'est un soft tiers qui le genere et à chaque fois il est soit au début soit à la fin ou au milieu. |
| |
| |
| | | |
|
| | |
| |
Posté le 18 juin 2021 - 23:38 |
ok... donc visiblement tu ne connais pas plus la gestion de chaines que la gestion de xml...
"position" c'est une fonction qui permet de trouver la position d'une sous chaine dans une chaine...
Je ne parlais donc à aucun moment de position fixe, mais bien de trouver en une instruction ou est le début, une autre ou est la fin, et ensuite extraire le milieu |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 844 messages Popularité : +227 (347 votes) |
|
Posté le 19 juin 2021 - 16:25 |
Bonour, Je reformule : Tu cherches a parcourir un tableau de structure afin de rechercher l'élement dont le membre "name" a une valeur donnée et de récupérer la membre "value" associé Ecrit comme ça, ça fait déjà moins peur. Une solution peut être la fonction suivante :
FONCTION RechercherDepot(saCheminXML est chaîne) :chaîne
saContenu est une chaîne saNom est une chaîne saValeur est chaîne saBrancheNom est chaîne saBrancheValeur est chaîne saBranche est chaîne nIndice est entier
saContenu=fChargeTexte(saCheminXML) XMLDocument("MonXML",saContenu)
saBrancheNom="/configuration/userSettings/application.My.MySettings/setting[%1]/@name" saBrancheValeur="/configuration/userSettings/application.My.MySettings/setting[%1]/value" nIndice=1
saBranche=ChaîneConstruit(saBrancheNom,nIndice) saNom = XMLLit("MonXML", saBranche) saBranche=ChaîneConstruit(saBrancheValeur,nIndice) saValeur=XMLLit("MonXML",saBranche)
TANTQUE saNom<>"" ET saNom<>"Folder_Depot_CHIFA" nIndice++ saBranche=ChaîneConstruit(saBrancheNom,nIndice) saNom = XMLLit("MonXML", saBranche) saBranche=ChaîneConstruit(saBrancheValeur,nIndice) saValeur=XMLLit("MonXML",saBranche) FIN
RENVOYER saValeur
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 6 messages Popularité : +1 (1 vote) |
|
Posté le 19 juin 2021 - 23:48 |
Merci beaucoup je vais le tester dès que je rentre 😊 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 6 messages Popularité : +1 (1 vote) |
|
Posté le 21 juin 2021 - 06:33 |
Voroltinquo a écrit :
Bonour, Je reformule : Tu cherches a parcourir un tableau de structure afin de rechercher l'élement dont le membre "name" a une valeur donnée et de récupérer la membre "value" associé Ecrit comme ça, ça fait déjà moins peur. Une solution peut être la fonction suivante :
Fonction RechercherDepot(saCheminXML est chaîne) :Chaine
saContenu est une chaîne saNom est une chaîne saValeur est chaîne saBrancheNom est chaîne saBrancheValeur est chaîne saBranche est chaîne nIndice est entier
//On crée le document XML saContenu=fChargeTexte(saCheminXML) XMLDocument("MonXML",saContenu)
//On initialise la branche à parcourir saBrancheNom="/configuration/userSettings/application.My.MySettings/setting[%1]/@name" saBrancheValeur="/configuration/userSettings/application.My.MySettings/setting[%1]/value" nIndice=1
//On initialise le parcours saBranche=ChaîneConstruit(saBrancheNom,nIndice) saNom = XMLLit("MonXML", saBranche) saBranche=ChaîneConstruit(saBrancheValeur,nIndice) saValeur=XMLLit("MonXML",saBranche)
TANTQUE saNom<>"" ET saNom<>"Folder_Depot_CHIFA" nIndice++ saBranche=ChaîneConstruit(saBrancheNom,nIndice) saNom = XMLLit("MonXML", saBranche) saBranche=ChaîneConstruit(saBrancheValeur,nIndice) saValeur=XMLLit("MonXML",saBranche) FIN
RENVOYER saValeur //saEmplacement sera vide si saRésultat est vide
-- Il y a peut être plus simple, mais, ça tourne
Bonjour, ça marche nikel parcontre j'ai pas su comment modifier la valeur puisque XMLNomElement("MonXML") est toujours sur "configuration" , donc dés que je fais XMLMODIFIE la valeur que j'entre s'ecrit aprés la balise <configuration> !!! |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 844 messages Popularité : +227 (347 votes) |
|
Posté le 21 juin 2021 - 07:10 |
il faut passer par XMLEcrit Un truc du style :
FONCTION ModifierDepot(saCheminXML est chaîne,saNouvelleValeur est chaîne,saDestination est chaîne=""):booléen
saContenu est une chaîne saNom est une chaîne saValeur est chaîne saBrancheNom est chaîne saBrancheValeur est chaîne saBranche est chaîne nIndice est entier
saContenu=fChargeTexte(saCheminXML) XMLDocument("MonXML",saContenu)
saBrancheNom="/configuration/userSettings/application.My.MySettings/setting[%1]/@name" saBrancheValeur="/configuration/userSettings/application.My.MySettings/setting[%1]/value" nIndice=1
saBranche=ChaîneConstruit(saBrancheNom,nIndice) saNom = XMLLit("MonXML", saBranche) saBranche=ChaîneConstruit(saBrancheValeur,nIndice) saValeur=XMLLit("MonXML",saBranche)
TANTQUE saNom<>"" ET saNom<>"Folder_Depot_CHIFA" nIndice++ saBranche=ChaîneConstruit(saBrancheNom,nIndice) saNom = XMLLit("MonXML", saBranche) saBranche=ChaîneConstruit(saBrancheValeur,nIndice) saValeur=XMLLit("MonXML",saBranche) FIN
XMLEcrit("MonXML",saBranche,saNouvelleValeur) SI saDestination="" ALORS saDestination=saCheminXML FIN
RENVOYER fSauveTexte(saDestination,XMLConstruitChaîne("MonXML"))
On peut faire nettement plus propre.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 6 messages Popularité : +1 (1 vote) |
|
Posté le 22 juin 2021 - 03:52 |
pour moi c'est déjà très propre par rapport au code que j'avais écrit comme system D , merci beaucoup |
| |
| |
| | | |
|
| | | | |
| | |
|