PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Recherce et Modification valeur XML
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

//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
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 :merci:
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 :D , merci beaucoup :merci: