PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Supprimer une ligen d'un tableau de xmlNoeud
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