|
XMLSupprime - ligne blanche |
Iniciado por Jean-Yves THIRY, ago., 29 2025 1:40 PM - 6 respostas |
| |
| | | |
|
| |
Membro registado 191 mensagems |
|
Publicado em agosto, 29 2025 - 1:40 PM |
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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 2.259 mensagems |
|
Publicado em agosto, 29 2025 - 2:47 PM |
Bonjour Jean-Yves,
Illustration du problème SVP 
-- Bon dev, Jean-Pierre |
| |
| |
| | | |
|
| | |
| |
Membro registado 191 mensagems |
|
Publicado em setembro, 01 2025 - 5:44 AM |
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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 2.259 mensagems |
|
Publicado em setembro, 01 2025 - 11:44 AM |
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 |
| |
| |
| | | |
|
| | |
| |
Membro registado 489 mensagems |
|
Publicado em setembro, 01 2025 - 3:05 PM |
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. |
| |
| |
| | | |
|
| | |
| |
Membro registado 191 mensagems |
|
Publicado em setembro, 02 2025 - 5:25 AM |
Bonjour
Après vérification, ce ne sont pas des retours chariot (CR) mais des line feed (LF)
-- Jean-Yves Thiry Informatique et Gestion |
| |
| |
| | | |
|
| | |
| |
Membro registado 489 mensagems |
|
Publicado em setembro, 02 2025 - 2:42 PM |
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 ? |
| |
| |
| | | |
|
| | | | |
| | |
|