|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
XMLSupprime - ligne blanche |
Débuté par Jean-Yves THIRY, 29 aoû. 2025 13:40 - 6 réponses |
| |
| | | |
|
| |
Membre enregistré 191 messages |
|
Posté le 29 août 2025 - 13:40 |
Bonjour
Lors de la suppression d'un élément dans un fichier XML avec la commande XMLSupprime, le bloc de l'élément est bien effacé dans le fichier mais une ligne "blanche" reste et cela pose des problèmes lors de traitements ultérieurs.
Est-ce normal ? Avez-vous une solution ?
Bàv
-- Jean-Yves Thiry Informatique et Gestion |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 260 messages |
|
Posté le 29 août 2025 - 14:47 |
Bonjour Jean-Yves,
Illustration du problème SVP 
-- Bon dev, Jean-Pierre |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 191 messages |
|
Posté le 01 septembre 2025 - 05:44 |
Merci pour votre retour...
Voici le code :
XMLDocument(sMonDocXML,sInfoXML) XMLRacine(sMonDocXML) XMLRecherche(sMonDocXML,"PartyTaxScheme",XMLBalise+XMLSousElément+XMLContinue,XMLExact) TANTQUE XMLTrouve(sMonDocXML)=Vrai XMLSupprime(sMonDocXML) XMLSuivant(sMonDocXML) FIN SourceXML=XMLConstruitChaîne(sMonDocXML) fSauveTexte(val_fic,SourceXML) XMLAnnuleRecherche(sMonDocXML) XMLTermine(sMonDocXML)
Une partie du fichier XML avant traitement :
<cac:PartyName> <cbc:Name>XXXXXX</cbc:Name> </cac:PartyName> <cac:PostalAddress> <cbc:StreetName>XXXXXX</cbc:StreetName> <cbc:CityName>XXXXXX</cbc:CityName> <cbc:PostalZone>XXXXXX</cbc:PostalZone> <cac:Country> <cbc:IdentificationCode>XX</cbc:IdentificationCode> </cac:Country> </cac:PostalAddress> <cac:PartyTaxScheme> <cac:TaxScheme> <cbc:ID>VAT</cbc:ID> </cac:TaxScheme> </cac:PartyTaxScheme> <cac:PartyLegalEntity> <cbc:RegistrationName>XXXXXX</cbc:RegistrationName> </cac:PartyLegalEntity>
La même partie du fichier XML après traitement (avec la ligne vide) :
<cac:PartyName> <cbc:Name>XXXXXX</cbc:Name> </cac:PartyName> <cac:PostalAddress> <cbc:StreetName>XXXXXX</cbc:StreetName> <cbc:CityName>XXXXXX</cbc:CityName> <cbc:PostalZone>XXXXXX</cbc:PostalZone> <cac:Country> <cbc:IdentificationCode>XX</cbc:IdentificationCode> </cac:Country> </cac:PostalAddress> <cac:PartyLegalEntity> <cbc:RegistrationName>XXXXXX</cbc:RegistrationName> </cac:PartyLegalEntity>
-- Jean-Yves Thiry Informatique et Gestion |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 260 messages |
|
Posté le 01 septembre 2025 - 11:44 |
Bonjour Jean-Yves,
Je suppose que tu as soumis le problème au ST. Quelle est leur réponse ?
Provisoirement, il faudrait : 1. Vérifier que la ligne vide est bien vide dans SourceXML via le debugger 2. Ajouter une fonction pour remplacer un double RC par un simple RC avant le le fSauveTexte(val_fic,SourceXML) 3. Je n'y crois pas beaucoup mais tu peux tester le retour de XMLSupprime().
NB : merci de mettre le code WL entre les balise ad hoc dans le post. 
-- Bon dev, Jean-Pierre |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 489 messages |
|
Posté le 01 septembre 2025 - 15:05 |
Bonjour,
En toute logique, le XML est un langage de balisage, au même titre que le HTML. Les retours chariots dans un fichier XML devraient être donc complètement ignorés, qu'il en existe 50, ou aucun (en dehors de quelques cas spécifiques, les balises CDATA notamment).
Ce n'est pas très esthétique j'en conviens, mais les interprétateurs ne devraient pas broncher. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 191 messages |
|
Posté le 02 septembre 2025 - 05:25 |
Bonjour
Après vérification, ce ne sont pas des retours chariot (CR) mais des line feed (LF)
-- Jean-Yves Thiry Informatique et Gestion |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 489 messages |
|
Posté le 02 septembre 2025 - 14:42 |
Bonjour,
LF sur Linux, ou RC (qui est CR+LF) sur Windows, le postulat reste le même : ils ne devraient pas déranger les interprétateurs XML.
Ceci dit, j'ai fait le test chez moi et je ne reproduis pas :
sInfoXML est une chaîne = [ <?xml version="1.0" encoding="UTF-8"?> <doc> <cac:PartyName> <cbc:Name>XXXXXX</cbc:Name> </cac:PartyName> <cac:PostalAddress> <cbc:StreetName>XXXXXX</cbc:StreetName> <cbc:CityName>XXXXXX</cbc:CityName> <cbc:PostalZone>XXXXXX</cbc:PostalZone> <cac:Country> <cbc:IdentificationCode>XX</cbc:IdentificationCode> </cac:Country> </cac:PostalAddress> <cac:PartyTaxScheme> <cac:TaxScheme> <cbc:ID>VAT</cbc:ID> </cac:TaxScheme> </cac:PartyTaxScheme> <cac:PartyLegalEntity> <cbc:RegistrationName>XXXXXX</cbc:RegistrationName> </cac:PartyLegalEntity> </doc> ]
XMLDocument("XML",sInfoXML) XMLRacine("XML") XMLRecherche("XML","PartyTaxScheme",XMLBalise+XMLSousElément+XMLContinue,XMLExact) TANTQUE XMLTrouve("XML")=Vrai XMLSupprime("XML") XMLSuivant("XML") FIN
XMLAnnuleRecherche("XML") SourceXML est une chaîne = (XMLConstruitChaîne("XML", XMLEncodageUTF8)) XMLTermine("XML")
RENVOYER 1
Ce code renvoie bien un XML séparé par des LF (ce qui est peut-être un bug, vu que je n'ai pas spécifié xmlMiseEnForme dans le XMLConstruitChaine()), mais je n'ai pas de saut de ligne pour autant à l'endroit où la balise a été supprimée.
Peut-être sinon en essayant de passer par les variables xmlDocument et xmlNoeud, et l'appel à un XMLExecutePath(), mais je n'ai pas investigué le sujet.
Avez-vous peut-être autre chose en amont, ou en aval, qui créerait ce saut de ligne. Vous mentionnez qu'il ne s'agit que d'un extrait du XML, le xml original contient peut-être des balises ou indications qui entrainent ce problème ? |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|