PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Parcour fichier XML
Parcour fichier XML
Iniciado por Stéphane D., 01,mar. 2019 15:53 - 20 respuestas
Miembro registrado
231 mensajes
Publicado el 01,marzo 2019 - 15:53
Bonjour à tous,
Je voudrais récupérer les valeurs pour un article recherché par son code barre,
Mais je n'y arrive pas, je cherche depuis ce matin et rien...
Voici un bout du fichier XML :
<article>
<Product>
<RecordReference>9782732478470</RecordReference>
<NotificationType>03</NotificationType>
<ProductIdentifier>
<ProductIDType>01</ProductIDType>
<IDValue>869191</IDValue>
</ProductIdentifier>
<ProductIdentifierttt>
<ProductIDType>03</ProductIDType>
<IDValue>9782732478470</IDValue>
</ProductIdentifierttt>
<ProductIdentifiert>
<ProductIDType>15</ProductIDType>
<IDValue>9782732478470</IDValue>
</ProductIdentifiert>
<ProductIdentifier sourcename="DILICOM" sourcetype="04">
<ProductIDType>31</ProductIDType>
<IDValue>FRBNF451998660000005</IDValue>
</ProductIdentifier>
<Barcode>
<BarcodeType>02</BarcodeType>
<PositionOnProduct>00</PositionOnProduct>
</Barcode>
<DescriptiveDetail>
<ProductComposition>00</ProductComposition>
<ProductForm>BC</ProductForm>
<Measure>
<MeasureType>01</MeasureType>
<Measurement>286</Measurement>
<MeasureUnitCode>mm</MeasureUnitCode>
</Measure>
<Measure>
<MeasureType>02</MeasureType>
<Measurement>222</Measurement>
<MeasureUnitCode>mm</MeasureUnitCode>
</Measure>
<Measure>
</DescriptiveDetail>
</Product>
</article>

Et voilà un bout de code que je n'arrive pas à exploiter :
TableSupprimeTout(tbl_xml)
monFichierXML est une chaîne = "\\SRV-GS\Partage_GS\fichier.xml"

contenue_XML est une chaîne
contenue_XML = fChargeTexte(monFichierXML)

SI PAS xmlDocument("XMLDoc",contenue_XML) ALORS
Erreur("Erreur lors du chargement du fichier ",ErreurInfo(errComplet))
RETOUR
FIN

XMLRecherche("XMLDoc",sai_code_barre,XMLValeur)

SI XMLTrouve("XMLDoc") ALORS


XMLPremier("XMLDoc")
Info(XMLDonnée("XMLDoc"))

XMLSuivant("XMLDoc")
Info(XMLDonnée("XMLDoc"))

XMLSuivant("XMLDoc")
XMLFils("XMLDoc")
Info(XMLDonnée("XMLDoc"))

XMLSuivant("XMLDoc")
Info(XMLDonnée("XMLDoc"))

XMLParent("XMLDoc")
XMLParent("XMLDoc")

Info("Blocage ici : "+XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
FIN

Le code me semble bizarre... et pas très beau...
Ma question est comment faire pour récupérer toutes les valeurs pour le code article passé en paramètre.

Merci d'avance de votre aide.

--
Stéphane.
Mensaje modificado, 01,marzo 2019 - 15:55
Miembro registrado
231 mensajes
Publicado el 04,marzo 2019 - 12:39
Quelqu'un pourrais me donner un coup de main ?
Merci d'avance.

--
Stéphane.
Publicado el 04,marzo 2019 - 14:14
Le 04/03/2019 à 11:39, "Stéphane D." a écrit :
Quelqu'un pourrais me donner un coup de main ?
Merci d'avance.

--
Stéphane.


regarde avec les fonction
XMLFils(sMondocXML)
XMLPremier(sMondocXML)
TANTQUE PAS XMLEnDehors(sMondocXML)
SELON XMLNomElément(sMondocXML)
Miembro registrado
231 mensajes
Publicado el 04,marzo 2019 - 14:37
Merci Marcel, je vais regarder cela...

--
Stéphane.
Publicado el 04,marzo 2019 - 16:30
Le 04/03/2019 à 13:37, "Stéphane D." a écrit :
Merci Marcel, je vais regarder cela...

--
Stéphane.

si besoin exemple envoie mon ton email
je te fais parvenir une page ou deux
BAT
Miembro registrado
231 mensajes
Publicado el 04,marzo 2019 - 17:51
Re-Marcel Voici ce que j'ai fais mais il ne lit que le premier article
Voici mon code (Je sais vraiment pas si c'est comme cela que l'on code parfaitement le XML)
XMLPremier("XMLDoc")
XMLFils("XMLDoc")

TANTQUE PAS XMLEnDehors("XMLDoc")

SI XMLNomElément("XMLDoc") = "Product"
TANTQUE PAS XMLEnDehors("XMLDoc")
XMLFils("XMLDoc")
SELON XMLNomElément("XMLDoc")
//Product
CAS "RecordReference" : Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
CAS "NotificationType" : Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
//ProductIdentifier
CAS "ProductIDType" : Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
CAS "IDValue" :
Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
XMLParent("XMLDoc")
CAS "ProductIdentifier" : Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
//Barcode
CAS "BarcodeType" : Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
CAS "PositionOnProduct" :
Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
XMLParent("XMLDoc")
//DescriptiveDetail
CAS "ProductComposition" : Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
CAS "ProductForm" : Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
//Measure
CAS "MeasureType" : Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
CAS "Measurement" : Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
CAS "MeasureUnitCode" :
Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
XMLParent("XMLDoc")
//ProductClassification
CAS "ProductClassificationType" : Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
CAS "ProductClassificationCode" : Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
CAS "Percent" :
Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
XMLParent("XMLDoc")
AUTRE CAS
Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
FIN
XMLSuivant("XMLDoc")
FIN
FIN

XMLSuivant("XMLDoc")
FIN


Voici un email de contact : sdeuss@neuf.fr
--
Stéphane.
Mensaje modificado, 04,marzo 2019 - 17:53
Miembro registrado
2.682 mensajes
Publicado el 04,marzo 2019 - 18:03
Bonjour,

Il te suffit d'importer la structure de ton fichier xml dans ton projet et ensuite tu utilises une variable de type XMLDocument
MonXML est un xmlDocument <Description="test"> = XMLOuvre(fRepExe()+"\test.xml")
Trace(MonXML.article.Product.ProductIdentifier[1].IDValue)


--
Cordialement,

Philippe SAINT-BERTIN
Publicado el 05,marzo 2019 - 05:38
Le 04/03/2019 à 16:51, "Stéphane D." a écrit :
Re-Marcel Voici ce que j'ai fais mais il ne lit que le premier article
Voici mon code (Je sais vraiment pas si c'est comme cela que l'on code
parfaitement le XML)
XMLPremier("XMLDoc")
XMLFils("XMLDoc")

TANTQUE PAS XMLEnDehors("XMLDoc")

    SI XMLNomElément("XMLDoc") = "Product"         TANTQUE PAS
XMLEnDehors("XMLDoc")
            XMLFils("XMLDoc")
            SELON XMLNomElément("XMLDoc")
                //Product
                CAS "RecordReference"   :
Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
                CAS "NotificationType"  :
Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
                //ProductIdentifier
                CAS "ProductIDType" : Trace(XMLNomElément("XMLDoc")+ "
Valeur : "+XMLDonnée("XMLDoc"))
                CAS "IDValue" :
Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
                    XMLParent("XMLDoc")
                CAS "ProductIdentifier" :
Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
                //Barcode
                CAS "BarcodeType" : Trace(XMLNomElément("XMLDoc")+ "
Valeur : "+XMLDonnée("XMLDoc"))
                CAS "PositionOnProduct" :
Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
                    XMLParent("XMLDoc")
                //DescriptiveDetail
                CAS "ProductComposition" :
Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
                CAS "ProductForm" : Trace(XMLNomElément("XMLDoc")+ "
Valeur : "+XMLDonnée("XMLDoc"))
                //Measure
                CAS "MeasureType" : Trace(XMLNomElément("XMLDoc")+ "
Valeur : "+XMLDonnée("XMLDoc"))
                CAS "Measurement" : Trace(XMLNomElément("XMLDoc")+ "
Valeur : "+XMLDonnée("XMLDoc"))
                CAS "MeasureUnitCode" :
Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
                    XMLParent("XMLDoc")
                //ProductClassification
                CAS "ProductClassificationType" :
Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
                CAS "ProductClassificationCode" :
Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
                CAS "Percent" :
Trace(XMLNomElément("XMLDoc")+ " Valeur : "+XMLDonnée("XMLDoc"))
                    XMLParent("XMLDoc")
                AUTRE CAS
                    Trace(XMLNomElément("XMLDoc")+ " Valeur :
"+XMLDonnée("XMLDoc"))
            FIN
            XMLSuivant("XMLDoc")
        FIN
    FIN

    XMLSuivant("XMLDoc")
FIN


Voici un email de contact : sdeuss@neuf.fr
--
Stéphane.

et quand tu as fini le controle tu dois revenir dasn le parent
AUTRE CAS
FIN
XMLSuivant(sMondocXML)
FIN
XMLParent(sMondocXML)

Bon windev
Miembro registrado
2.682 mensajes
Publicado el 05,marzo 2019 - 07:09
Bonjour,

Je persiste et signe en disant que mon code est plus claire que le votre... :p. Gérer le XML de cette manière, ça ne se fait plus.

--
Cordialement,

Philippe SAINT-BERTIN
Miembro registrado
2.682 mensajes
Publicado el 05,marzo 2019 - 08:03
Pour info, avec import de la structure xml dans le projet

Fichier xml
<root>
<article>
<Product>
<RecordReference>9782732478470</RecordReference>
<NotificationType>03</NotificationType>
<ProductIdentifier>
<ProductIDType>01</ProductIDType>
<IDValue>869191</IDValue>
</ProductIdentifier>
<ProductIdentifierttt>
<ProductIDType>03</ProductIDType>
<IDValue>9782732478470</IDValue>
</ProductIdentifierttt>
<ProductIdentifiert>
<ProductIDType>15</ProductIDType>
<IDValue>9782732478470</IDValue>
</ProductIdentifiert>
<ProductIdentifier sourcename="DILICOM" sourcetype="04">
<ProductIDType>31</ProductIDType>
<IDValue>FRBNF451998660000005</IDValue>
</ProductIdentifier>
<Barcode>
<BarcodeType>02</BarcodeType>
<PositionOnProduct>00</PositionOnProduct>
</Barcode>
<DescriptiveDetail>
<ProductComposition>00</ProductComposition>
<ProductForm>BC</ProductForm>
<Measure>
<MeasureType>01</MeasureType>
<Measurement>286</Measurement>
<MeasureUnitCode>mm</MeasureUnitCode>
</Measure>
<Measure>
<MeasureType>02</MeasureType>
<Measurement>222</Measurement>
<MeasureUnitCode>mm</MeasureUnitCode>
</Measure>
</DescriptiveDetail>
</Product>
</article>
<article>
<Product>
<RecordReference>9782732478470</RecordReference>
<NotificationType>03</NotificationType>
<ProductIdentifier>
<ProductIDType>01</ProductIDType>
<IDValue>869191</IDValue>
</ProductIdentifier>
<ProductIdentifierttt>
<ProductIDType>03</ProductIDType>
<IDValue>9782732478470</IDValue>
</ProductIdentifierttt>
<ProductIdentifiert>
<ProductIDType>15</ProductIDType>
<IDValue>9782732478470</IDValue>
</ProductIdentifiert>
<ProductIdentifier sourcename="DILICOM" sourcetype="04">
<ProductIDType>31</ProductIDType>
<IDValue>FRBNF451998660000005</IDValue>
</ProductIdentifier>
<Barcode>
<BarcodeType>02</BarcodeType>
<PositionOnProduct>00</PositionOnProduct>
</Barcode>
<DescriptiveDetail>
<ProductComposition>00</ProductComposition>
<ProductForm>BC</ProductForm>
<Measure>
<MeasureType>01</MeasureType>
<Measurement>286</Measurement>
<MeasureUnitCode>mm</MeasureUnitCode>
</Measure>
<Measure>
<MeasureType>01</MeasureType>
<Measurement>111</Measurement>
<MeasureUnitCode>cm</MeasureUnitCode>
</Measure>
</DescriptiveDetail>
</Product>
</article>
</root>



MonXML est un xmlDocument <Description="exemple"> = XMLOuvre(fRepExe()+"\exemple.xml")
UnArticle est un xmlNoeud,Description="exemple.root.article"
Measure est un xmlNoeud,Description="exemple.root.article.Product.DescriptiveDetail.Measure"
POUR TOUT UnArticle de MonXML.root
Trace(UnArticle.Product.RecordReference)
Trace(UnArticle.Product.NotificationType)

POUR TOUT Measure de UnArticle.Product.DescriptiveDetail SUR Measure
Trace(Measure.Measurement)
Trace(Measure.MeasureType)
Trace(Measure.MeasureUnitCode)
FIN
FIN


Résultat
9782732478470
03
286
01
mm
222
02
mm
9782732478470
03
286
01
mm
111
01
cm


--
Cordialement,

Philippe SAINT-BERTIN
Miembro registrado
231 mensajes
Publicado el 05,marzo 2019 - 09:08
Salut Marcel et Philippe,
En premier lieu, je vous remercie grandement pour votre aide.
Pour le code, je me douté un peu que se n'était pas très propre et quand je regarde le code de Philippe c'est un peu comme manipuler du json.
Je vais tester cela Jeudi matin (Planning pour faire du XML) et vous tiens au courant.
Bonne journée à vous.

--
Stéphane.
Publicado el 05,marzo 2019 - 09:13
Le 05/03/2019 à 06:09, Philippe SB a écrit :
Bonjour,

Je persiste et signe en disant que mon code est plus claire que le
votre... :p. Gérer le XML de cette manière, ça ne se fait plus.

--
Cordialement,

Philippe SAINT-BERTIN

Bonjour Monsieur Saint-Bertin si c'est pour moi et je le suppose
Peut-être ... mais généralement je travaille sur des XSD
et le principe de prendre votre fichier et de le mettre dans l'analyse
J'ai un fichier XML... que je veux bien vous fournir pour voir
Il va me générer 50 ou 60 fichiers XML dans mon analyses je l'ai fait il
y a des années
Il est parti dans des Salaires... départ majoration... diminution saisie
etc etc
Je fais des XML depuis 1998 avec des actes de laboratoires et autres
Chacun sa manière de faire
je pars dans les fils et je lis tout dans certains cas je n'ai pas de
majorations , d'autres pas...de saisies etc etc je ne tiens pas du tout
à poluer mon analyses avec des fichiers inutiles
J'aurais maximum 200 ou 300 salaires par XML
Votre remarque est un peu blessante
Je ne sais pas si vous avez fait du SEPA ... je vous défie de prendre un
fichier SEPA de retour et de le mettre dans votre analyse ..
je suis juste occupé à
Je me suis juste amusé à l'instant de le faire ... plus de 30 fichiers
différents...
rien que pour cette partie ... il c'est amusé à me faire une dizaine de
fichies ... donc
Alors que dans l'entête il me suffit de lire le nombre et de faire
.... etc
<TxInfAndSts>
<StsId>SDC219025T023278</StsId>
<OrgnlInstrId>14261</OrgnlInstrId>
<OrgnlEndToEndId>14261</OrgnlEndToEndId>
<TxSts>ACSC</TxSts>
<StsRsnInf>
<Rsn>
<Cd>SL02</Cd>
</Rsn>
</StsRsnInf>
<OrgnlTxRef>
<Amt>
<InstdAmt Ccy="EUR">14.00</InstdAmt>
</Amt>
<IntrBkSttlmDt>2019-02-01</IntrBkSttlmDt>
<ReqdColltnDt>2019-01-25</ReqdColltnDt>
<CdtrSchmeId>
<Id>
<PrvtId>
<Othr>
<Id>LU57ZZZ0000000000000000760</Id>
<SchmeNm>
<Prtry>SEPA</Prtry>
</SchmeNm>
</Othr>
</PrvtId>
</Id>
</CdtrSchmeId>
<MndtRltdInf>
<MndtId>14261</MndtId>
<DtOfSgntr>2019-01-15</DtOfSgntr>
</MndtRltdInf>
<RmtInf>
<Ustrd>NGL-SNEP 01/2019</Ustrd>
</RmtInf>
en tout cas je vous remercie de votre commentaire.
Miembro registrado
2.682 mensajes
Publicado el 05,marzo 2019 - 10:36
@Marcel Feiereisen: Ce n'était absolument pas dirigé contre vous, je dis juste qu’aujourd’hui il y a des moyens plus propres et plus efficaces de gérer le xml.

Oui j'ai fait du SEPA de la manière dont je l'ai montré. Il n'est nullement besoin d'importer le fichier xml dans l'analyse pour le traiter. Il suffit tout simplement de regarder dans le treeview du projet, il y a un item qui s'appelle "Descriptions XML et XSD" en version 23 et "Descriptions Externes" en 24. Cela permet d'importer toute la structure d'un fichier XML ou XSD et de profiter de la complétion automatique. Ma méthode ne pollue pas l'analyse et simplifie tout simplement le développement. Si vous aviez pris le temps de lire le code que j'avais posté et faire une toute petite recherche dans l'aide vous ne m'auriez pas répondu cela.

Ensuite je suis d'accord que chacun sa méthode pour le développement. Je suis plutôt du genre à utiliser les fonctionnalités les plus simples et rapides plutôt qu'à me prendre la tête à lire tout un fichier xml sans jamais savoir où j'en suis.

De temps en temps, il est judicieux de regarder les nouveautés et les évolutions d'un langage. On en apprend tous les jours et moi le premier. Ne pouvant uploader d'image pour "une raison inconnue selon le forum", je vous laisse jeter un oeil sur ces fonctionnalités qui peuvent vous faire gagner un temps précieux.

--
Cordialement,

Philippe SAINT-BERTIN
Publicado el 05,marzo 2019 - 11:20
Le 05/03/2019 à 09:36, Philippe SB a écrit :
@Marcel Feiereisen: Ce n'était absolument pas dirigé contre vous, je dis
juste qu’aujourd’hui il y a des moyens plus propres et plus efficaces de
gérer le xml.

Oui j'ai fait du SEPA de la manière dont je l'ai montré. Il n'est
nullement besoin d'importer le fichier xml dans l'analyse pour le
traiter. Il suffit tout simplement de regarder dans le treeview du
projet, il y a un item qui s'appelle "Descriptions XML et XSD" en
version 23 et "Descriptions Externes" en 24. Cela permet d'importer
toute la structure d'un fichier XML ou XSD et de profiter de la
complétion automatique. Ma méthode ne pollue pas l'analyse et simplifie
tout simplement le développement. Si vous aviez pris le temps de lire le
code que j'avais posté et faire une toute petite recherche dans l'aide
vous ne m'auriez pas répondu cela.

Ensuite je suis d'accord que chacun sa méthode pour le développement. Je
suis plutôt du genre à utiliser les fonctionnalités les plus simples et
rapides plutôt qu'à me prendre la tête à lire tout un fichier xml sans
jamais savoir où j'en suis.
De temps en temps, il est judicieux de regarder les nouveautés et les
évolutions d'un langage. On en apprend tous les jours et moi le premier.
Ne pouvant uploader d'image pour "une raison inconnue selon le forum",
je vous laisse jeter un oeil sur ces fonctionnalités qui peuvent vous
faire gagner un temps précieux.

--
Cordialement,

Philippe SAINT-BERTIN

Pour créer les XML d'accord je le fais aussi IMPORTER le XSD et j'ai
bien l'implémentation inutile de me dire cela je parle de la lecture
retour ou lecture d'un fichier XML et c'était cela le départ de la
conversation importer UN XML est dangereux car il peut manquer beaucoup
d'option... et si l'option n'est pas obligatoire ... vous risquez un
jour d'avoir un retour avec celle-ci.
Un XSD... je dois avoir importer des dizaines...
Le problème avec WINDEV ... c'est la validation qui est bien souvent
incorrect chez WIndev... mais quand je le passe sur des sites
administratifs... c'est faux j'ai déjà eu des disputes avec WIndev qui
je dois dire à chaque fois ont répondus et des fois dans mes attentes.
Je lis aussi les nouveautés, et concernant les XML la seule vrai de la
dernière et encore nouveauté c'est pouvoir soit disant lire des gros
fichiers j'ai des fichiers qui me font plusieurs dizaines de MB si pas plus
Et si vous faites du SEPA il vous suffit de lire ..pour le retour
le Premier DtldNbOfTxs qui vous dira .. chez moi cela peut atteindre
3000 ou 4000
et de faire des tableaux avec la référence le montant le code de retour
en une cinquante de ligne j'ai tout pris et pas d'erreur depuis des ...
compris vérification nom du fichier etc
il est inutile d'employer le XSD
pour écrire le fichier là vous avez raison il est pratiquement
impossible de le faire sans le pain.008.001.02.xsd je crois que c'est le
dernier là nous sommes d'accord

BAV et merci de cet échange
Miembro registrado
2.682 mensajes
Publicado el 05,marzo 2019 - 11:38
Je suis d'accord que pour la validation du xml avec le xsd c'est à s'arracher les cheveux avec Windev. J'en ai d'ailleurs perdus quelques uns. J'ai fini par comprendre qu'il fallait construire le xml dans le même ordre que le xsd pour que la validation se fasse, ce qui à mon sens n'est pas logique mais bon.
Il est évident que s'il y a un xsd, il est préférable de l'importer en lieu du xml cependant, lorsqu'on n'a que ça on fait avec

Pour en revenir à l'exemple présent, je trouve que la lecture est tout de même plus simple avec une variable de type XMLDocument, mais là c'est plus une question d'habitude..

--
Cordialement,

Philippe SAINT-BERTIN
Publicado el 05,marzo 2019 - 12:13
Le 05/03/2019 à 10:38, Philippe SB a écrit :
Je suis d'accord que pour la validation du xml avec le xsd c'est à
s'arracher les cheveux avec Windev. J'en ai d'ailleurs perdus quelques
uns. J'ai fini par comprendre qu'il fallait construire le xml dans le
même ordre que le xsd pour que la validation se fasse, ce qui à mon sens
n'est pas logique mais bon.
Il est évident que s'il y a un xsd, il est préférable de l'importer en
lieu du xml cependant, lorsqu'on n'a que ça on fait avec

Pour en revenir à l'exemple présent, je trouve que la lecture est tout
de même plus simple avec une variable de type XMLDocument, mais là c'est
plus une question d'habitude..

--
Cordialement,

Philippe SAINT-BERTIN


Au plaisir ... et grand merci pour ce débat
Miembro registrado
231 mensajes
Publicado el 05,marzo 2019 - 14:06
Sachant que l'on va me fournir un fichier XML de plus de 1go, est-ce que cela a-t-il une importance sur la façon de lire le fichier ?

--
Stéphane.
Miembro registrado
2.682 mensajes
Publicado el 05,marzo 2019 - 15:08
Pour les fichiers volumineux, voir la fonction xmlLecteur

--
Cordialement,

Philippe SAINT-BERTIN
Publicado el 05,marzo 2019 - 16:34
Le 05/03/2019 à 13:06, "Stéphane D." a écrit :
Sachant que l'on va me fournir un fichier XML de plus de 1go, est-ce que
cela a-t-il une importance sur la façon de lire le fichier ?

--
Stéphane.

Normalement c'est comme du Texte donc ...
J'ai eu beaucoup plus pire quand reprise des données
Xmlextraitchaine( .... etc)
Miembro registrado
231 mensajes
Publicado el 07,marzo 2019 - 18:03
Salut Marcel et Philippe,
Comme je vous ai dit j'allais faire du XML ce Jeudi, donc voilà une partie du code j'ai fait :
i est un entier=1
j est un entier=1
MonXML est un xmlDocument <Description="ONIX"> = XMLOuvre("c:\Partage_GS\ONIX.xml")
xOnixMess est un xmlNoeud,Description="ONIXMessage.Product"

Measure est un xmlNoeud,Description="Product.DescriptiveDetail.Measure"
ProductIdentifier est un xmlNoeud,Description="Product.ProductIdentifier"

POUR TOUT xOnixMess de MonXML.ONIXMessage

SI MonXML.ONIXMessage.Product[i].RecordReference = "9782020490412" ALORS

Trace(MonXML.ONIXMessage.Product[i].RecordReference)
Trace(MonXML.ONIXMessage.Product[i].NotificationType)

j=1
POUR TOUT ProductIdentifier de MonXML.ONIXMessage.Product[i] SUR ProductIdentifier
Trace(MonXML.ONIXMessage.Product[i].ProductIdentifier[j].ProductIDType)
Trace(MonXML.ONIXMessage.Product[i].ProductIdentifier[j].IDValue)
j++
FIN

Trace(MonXML.ONIXMessage.Product[i].Barcode.BarcodeType)
Trace(MonXML.ONIXMessage.Product[i].Barcode.PositionOnProduct)

Trace(MonXML.ONIXMessage.Product[i].DescriptiveDetail.ProductComposition)
Trace(MonXML.ONIXMessage.Product[i].DescriptiveDetail.ProductForm)

j=1
POUR TOUT Measure de MonXML.ONIXMessage.Product[i].DescriptiveDetail SUR Measure
Trace(MonXML.ONIXMessage.Product[i].DescriptiveDetail.Measure[j].MeasureType)
Trace(MonXML.ONIXMessage.Product[i].DescriptiveDetail.Measure[j].Measurement)
Trace(MonXML.ONIXMessage.Product[i].DescriptiveDetail.Measure[j].MeasureUnitCode)
j++
FIN

RETOUR
FIN
i++
FIN


Pouvez vous me dire si cela est propre ou si il y aurait des truc à ajouter.
J'espère aussi que se bout de code pourrait aider quelqu'un.
Merci d'avance de vos réponse.

--
Stéphane.
Miembro registrado
2.682 mensajes
Publicado el 08,marzo 2019 - 06:52
Bonjour,

Tu n'as pas besoin d'utiliser d'indice i et j dans ton pour tout

xOnixMess représente déjà un noeud de ton fichier xml, tu peux donc l'utiliser en tant que tel. C'est exactement la même chose pour les autres noeuds. Toutes ces variables sont mises à jour automatiquement lors de la boucle.

Ton code devient alors:
MonXML est un xmlDocument <Description="ONIX"> = XMLOuvre("c:\Partage_GS\ONIX.xml")
xOnixMess est un xmlNoeud,Description="exemple.root.article.Product"

Measure est un xmlNoeud,Description="Product.DescriptiveDetail.Measure"
ProductIdentifier est un xmlNoeud,Description="Product.ProductIdentifier"
POUR TOUT xOnixMess de MonXML.ONIXMessage

SI xOnixMess.RecordReference = "9782020490412" ALORS

Trace(xOnixMess.RecordReference)
Trace(xOnixMess.NotificationType)

POUR TOUT ProductIdentifier de xOnixMess SUR ProductIdentifier
Trace(ProductIdentifier.ProductIDType)
Trace(ProductIdentifier.IDValue)
FIN

Trace(xOnixMess.Barcode.BarcodeType)
Trace(xOnixMess.Barcode.PositionOnProduct)

Trace(xOnixMess.DescriptiveDetail.ProductComposition)
Trace(xOnixMess.DescriptiveDetail.ProductForm)

POUR TOUT Measure de xOnixMess.DescriptiveDetail SUR Measure
Trace(Measure.MeasureType)
Trace(Measure.Measurement)
Trace(Measure.MeasureUnitCode)
FIN

RETOUR
FIN
FIN


--
Cordialement,

Philippe SAINT-BERTIN