PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Noeud fichier XML
Noeud fichier XML
Started by LC, Apr., 25 2018 7:14 PM - 10 replies
Registered member
628 messages
Popularité : +0 (16 votes)
Posted on April, 25 2018 - 7:14 PM
Bonjour à tous,
je suis un peu perdu dans les noeuds et les balises ...
je souhaiterais ça:
<Enveloppe>
<Parametres>
<Version V="2"></Version>
<TypFic V="XXX"></TypFic>
<NomFic V="YYY.XML"></NomFic>
</Parametres>
</Enveloppe>
je code donc :
XMLDocument("DocXML")
XMLAjouteFils("DocXML", "Enveloppe", "", Vrai)
XMLAjouteFils("DocXML", "Parametres", "", Vrai)
XMLAjouteFils("DocXML", "Version", "", Vrai)
XMLAjouteAttribut("DocXML", "V","2",Faux)
XMLAjouteFils("DocXML", "TypFic", "", Vrai)
XMLAjouteAttribut("DocXML", "V","XXX")
XMLAjouteFils("DocXML", "NomFic", "", Vrai)
XMLAjouteAttribut("DocXML", "V","YYY")

le problème c'est que "Version" ne se "ferme" pas avant "TypeFic" mais à la fin en arborescence comme toutes les balises,
ou est le pb dans mon code ?
Registered member
281 messages
Popularité : +24 (26 votes)
Posted on April, 25 2018 - 10:44 PM
Bonsoir,

Il est préférable de passer par une variable de type XMLDocument/XMLNoeud.

XmlDoc est un xmlDocument
xmlNoeud est un xmlNoeud dynamique

XmlDoc.Enveloppe.Parametres = ""

xmlNoeud = allouer un xmlNoeud
xmlNoeud..Nom = "Version"
xmlNoeud:V..Valeur = "2"

Ajoute(XmlDoc.Enveloppe.Parametres, xmlNoeud)

xmlNoeud = allouer un xmlNoeud
xmlNoeud..Nom = "TypFic"
xmlNoeud:V..Valeur = "XXX"

Ajoute(XmlDoc.Enveloppe.Parametres, xmlNoeud)

xmlNoeud = allouer un xmlNoeud
xmlNoeud..Nom = "NomFic"
xmlNoeud:V..Valeur = "YYY.XML"

Ajoute(XmlDoc.Enveloppe.Parametres, xmlNoeud)


ou encore plus simple :)

XmlDoc est un xmlDocument

XmlDoc.Enveloppe.Parametres = ""
XmlDoc.Enveloppe.Parametres.Version:V..Valeur = "2"
XmlDoc.Enveloppe.Parametres.TypFic:V..Valeur = "XXX"
XmlDoc.Enveloppe.Parametres.NomFic:V..Valeur = "YYY.XML"
Message modified, April, 25 2018 - 10:47 PM
Registered member
628 messages
Popularité : +0 (16 votes)
Posted on April, 26 2018 - 10:00 AM
Merci pour ta réponse, mais les instructions xml... ne fonctionnent pas ?
Registered member
628 messages
Popularité : +0 (16 votes)
Posted on April, 26 2018 - 11:44 AM
je n'obtins pas ce que je voulais ...
j'obtiens :
<Version V="2" />
au lieu de :
<Version V="2"></Version>
Registered member
281 messages
Popularité : +24 (26 votes)
Posted on April, 26 2018 - 11:58 AM
En terme XML <Version V="2" /> c'est identique à <Version V="2"></Version>.

Il n'y a rien dans ta balise <Version></Version> donc inutile pour lui de la générée totalement.
Registered member
628 messages
Popularité : +0 (16 votes)
Posted on April, 26 2018 - 12:04 PM
ok je te remercie mais je n'y arrive toujours pas, il y a des 2 points qui me posent problème ...
j'ai besoin de ça :
<?xml version="1.0" encoding="ISO-8859-1"?>
<n:PES_Aller Id="EXPORTFACTURES" xmlns:n="http://www.minefi.gouv.fr/cp/helios/pes_v2/Rev0/aller">
<Enveloppe>
<Parametres>
<Version V="2"></Version>
<TypFic V="PESALR1"></TypFic>
<NomFic V="EXPORTFACTURES.XML"></NomFic>
</Parametres>
je n'arrive pas gérer la deuxième ligne, pfuu ..
Registered member
628 messages
Popularité : +0 (16 votes)
Posted on April, 26 2018 - 6:20 PM
j'ai réussi mais en trichant avec une variable normale chaine (Txtxml)
que je transforme à la fin en xml :
xmlDoc est un xmlDocument = XMLOuvre(TxtXml, depuisChaîne)
XMLSauve(xmlDoc, "test.xml", XMLDocumentDéfaut)
mais du coup, aucune utilisation des possibilités xml de windev ... un peu dommage !
comment dois je faire pour utiliser les possibilités de windev ?
Registered member
2,566 messages
Popularité : +222 (260 votes)
Posted on April, 27 2018 - 9:08 AM
Bonjour,

Windev ne sait pas gérer ce type de balises. Tu peux donc faire de la sorte pour utiliser au mieux les fonctionnalités windev:
1- tu importes la description xml dans Windev
2- le code
MonXML est un xmlDocument <Description="modele">
NameSpace est un xmlNamespace

NameSpace..Nom = "n"
NameSpace..URI = "http://www.minefi.gouv.fr/cp/helios/pes_v2/Rev0/aller"
MonXML.PES_Aller:Id = "ExportFactures"
Ajoute(MonXML.PES_Aller..NamespaceDéclaré,NameSpace)

MonXML.PES_Aller.Enveloppe.Parametres.NomFic:V = "EXPORTFACTURES.XML"
MonXML.PES_Aller.Enveloppe.Parametres.TypFic:V = "PESALR1"
MonXML.PES_Aller.Enveloppe.Parametres.Version:V = "2"

XMLSauve(MonXML,fRepExe()+"\test.xml",XMLMiseEnForme)

Xml est une chaîne = Remplace(fChargeTexte(fRepExe()+"\test.xml"),"PES_Aller","n:PES_Aller")
fSauveTexte(fRepExe()+"\test.xml",Xml)


C'est une bidouille mais tu n'as pas le choix pour le moment. Peut-être y'aura-t-il une évolution un jour ???

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Registered member
628 messages
Popularité : +0 (16 votes)
Posted on April, 27 2018 - 10:07 AM
ouais j'ai bien vu ... hélas ! merci pour ta réponse.
Registered member
962 messages
Popularité : +183 (185 votes)
Posted on April, 28 2018 - 12:30 AM
hello,
voici une solution ( il y a surement plus simple) :
XmlDoc est un WL.XMLDocument
XmlDoc2 est un WL.XMLDocument
Xml_Names est un xmlNamespace
Xml_Noeud est un xmlNoeud dynamique
// Construction de la première partie du XML
Xml_Noeud = XmlDoc.PES_Aller
// déclare le namespace
Xml_Names.Nom = "n"
Xml_Names.URI ="http://www.minefi.gouv.fr/cp/helio/pes_v2/Rev0/aller"
XmlDoc.PES_Aller=""
XmlDoc.PES_Aller:id="EXPORTFACTURES"
Ajoute(XmlDoc.PES_Aller..NamespaceDéclaré, Xml_Names)
XmlDoc.PES_Aller..Namespace = Xml_Names
Ajoute(Xml_Noeud..NamespaceDéclaré, Xml_Names)
SourceXML est une chaîne = XMLConstruitChaîne(XmlDoc)
// construction de l'autre partie XML
XmlDoc2.Enveloppe.Parametres = ""
XmlDoc2.Enveloppe.Parametres.Version:V..Valeur = "2"
XmlDoc2.Enveloppe.Parametres.TypFic:V..Valeur = "XXX"
XmlDoc2.Enveloppe.Parametres.NomFic:V..Valeur = "YYY.XML"
SourceXML2 est une chaîne = XMLConstruitChaîne(XmlDoc2)
Res est un booléen = XMLDocument("MonXml", SourceXML)
Res = XMLDocument("MonXml2",SourceXML2)
XMLInsèreDocument("MonXml","MonXml2")
XMLRacine("MonXml")
SourceXML = XMLConstruitChaîne("MonXml",XMLDocumentDéfaut,XMLEncodageIso8859_1)
Trace(SourceXML)
fSauveTexte(fRepExe() + ["\"] + "monXml.xml",SourceXML)
XMLTermine("MonXml") // Libère ,le document XML


et voici le résultat :
<?xml version="1.0" encoding="ISO-8859-1"?>
<n:PES_Aller xmlns:n="http://www.minefi.gouv.fr/cp/helio/pes_v2/Rev0/aller" id="EXPORTFACTURES">
<Enveloppe>
<Parametres>
<Version V="2"/>
<TypFic V="XXX"/>
<NomFic V="YYY.XML"/>
</Parametres>
</Enveloppe>
</n:PES_Aller>


--
Ami calmant, J.P
Registered member
2,566 messages
Popularité : +222 (260 votes)
Posted on April, 30 2018 - 9:17 AM
Merci à Jurassic Pork. Je n'avais jamais pensé à mettre le namespace du nœud à jour. Comme quoi plusieurs cerveaux valent mieux qu'un...:p

Du coup mon code fonctionne parfaitement et utilise toutes les fonctionnalités du xml Windev. Voici le code complètement fonctionnel:
MonXML est un xmlDocument <Description="modele">
NameSpace est un xmlNamespace

NameSpace..Nom = "n"
NameSpace..URI = "http://www.minefi.gouv.fr/cp/helios/pes_v2/Rev0/aller"
MonXML.PES_Aller:Id = "ExportFactures"
Ajoute(MonXML.PES_Aller..NamespaceDéclaré,NameSpace)
MonXML.PES_Aller..Namespace = NameSpace

MonXML.PES_Aller.Enveloppe.Parametres.NomFic:V = "EXPORTFACTURES.XML"
MonXML.PES_Aller.Enveloppe.Parametres.TypFic:V = "PESALR1"
MonXML.PES_Aller.Enveloppe.Parametres.Version:V = "2"

XMLSauve(MonXML,fRepExe()+"\test.xml",XMLMiseEnForme)


Le résultat
<?xml version="1.0" encoding="UTF-8"?>
<n:PES_Aller xmlns:n="http://www.minefi.gouv.fr/cp/helios/pes_v2/Rev0/aller" Id="ExportFactures">
<Enveloppe>
<Parametres>
<NomFic V="EXPORTFACTURES.XML"/>
<TypFic V="PESALR1"/>
<Version V="2"/>
</Parametres>
</Enveloppe>
</n:PES_Aller>


--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique