|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
| Supprimer une ligen d'un tableau de xmlNoeud |
| Débuté par LM Concept, 04 déc. 2025 12:16 - 5 réponses |
| |
| | | |
|
| |
Membre enregistré 394 messages |
|
| Posté le 04 décembre 2025 - 12:16 |
Bonjour, Si je reprend l'exemple de l'aide :
cMonDoc est un xmlDocument <Description="personne.xsd">
cMonDoc.personne.nom = "Dupont" cMonDoc.personne.prenom = "Jean" cMonDoc.personne.date_naissance = "19710211" cMonDoc.personne.email[1] = "jean.dupont@mondomaine.com" cMonDoc.personne.email[2] = "jean.dupont@autredomaine.com"
et que je souhaite supprimer la lIgne cMonDoc.personne.email[1] = "jean.dupont@mondomaine.com"
En passant par xmlDocument je vois qu'on ne peux pas utiliser les fonctions XLMSupprime et toutes les autres d'ailleurs !
Avez vous une idée pour supprime une ligne d'un tableau dans cas la ?
Merci.
BON DEV |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 317 messages |
|
| Posté le 04 décembre 2025 - 15:27 |
Bonjour, Une solution serait de passer par une désérialisation. Dans l'instance de la classe, tu supprime les adresses désirées puis tu re sérialise. A la volée
clUnePersonne est CPersonne bufRes est Buffer
bufRes=fChargeBuffer("Personne.XML") Désérialise(clUnePersonne,bufRes,psdXML)
clUnePersonne.SupprimeMail(1)
Sérialise(clUnePersonne,bufRes,psdXML) fSauveBuffer("Personne.XML",bufRes)
-- Il y a peut être plus simple, mais, ça tourne Quand tout a échoué, utilise l'option RTFM |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 290 messages |
|
| Posté le 04 décembre 2025 - 16:15 |
Bonjour,
Essayes ceci :
cMonDoc.personne.email[1].RAZ() Cdlt |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 394 messages |
|
| Posté le 04 décembre 2025 - 16:48 |
Merci pour ces réponses rapide. Je voulais éviter de tout repasser par des classes. Mais j'ai bien peur qu'il n'y ai pas beaucoup de solutions.
Pour le RAZ, cela vide la ligne mais elle reste ! Je me retrouve toujours avec 2 lignes mais la première est vide, or je veux supprimer complètement la ligne.
Merci BON DEV |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 290 messages |
|
| Posté le 04 décembre 2025 - 17:00 |
C'est étonnant, je viens d'essayer le code suivant :
cMonDoc est un xmlDocument <Description="personne.xsd"> cMonDoc.personne.nom = "Dupont" cMonDoc.personne.prenom = "Jean" cMonDoc.personne.date_naissance = "19710211" cMonDoc.personne.email[1] = "jean.dupont@mondomaine.com" cMonDoc.personne.email[2] = "jean.dupont@autredomaine.com" cMonDoc.personne.email[1].RAZ() cMonDoc.Sauve("c:\personne.xml")
Dans le document c:\personne.xml, la ligne est bien supprimée :
<personne><nom>Dupont</nom><prenom>Jean</prenom><date_naissance>19710211</date_naissance><email>jean.dupont@autredomaine.com</email></personne>

Message modifié, 04 décembre 2025 - 17:02 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 394 messages |
|
| Posté le 05 décembre 2025 - 10:26 |
Oui en effet ça fonctionne ! C'est que je n’étais pas allé jusqu'à l'enregistrement ! J'ai simplement regardé la valeur de cMonDoc dans le débogueur, et la on voit la ligne toujours présente, mais vide. Donc la ligne et supprimée seulement lors de l'enregistrement. Ça ne fait pas mes affaires car j'ai un data binding sur une table. Mais c'est quand même un bon plan.
Au final j'ai fait ça dans mon projet, exemple avec cMonDoc vu au début :
LesEmail_TEMP est un xmlNoeud <Description=Personne.email>
Puis parcourir les emails dans cMonDoc et les recopier dans LesEmail_TEMP sauf la ligne a supprimer. et je recopie ensuite le tableau LesEmail_TEMP dans cMonDoc
Tous cela dans une petite procédure ou je passe en paramètres la ligne à ne pas copier, donc à supprimer
Ça parait usine a gaz, mais une quinzaine de lignes dans la procédure "Supprime" ça va !!
Mais le .RAZ() m’intéresse, je ne connaissait pas dans ce cas, et ça m'arrange pour ne pas générer les balise vides lors de la création du XML finale!
Merci BON DEV |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|