IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Xmlecrit creation fichier xml


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    86
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 86
    Points : 17
    Points
    17
    Par défaut Xmlecrit creation fichier xml
    Bonjour j'ai un problème avec xmlecrit j'ai une table remplit par programmation et j'aimerais exporter ces lignes dans un fichier xml avec des balises personnaliser le problème il marche mais il me prend juste la dernière ligne
    voici le code que j'ai met

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    POUR i = 1 _A_ TABLE_DECLAR..Occurrence 
    	XMLEcrit("monXML","releveDeductions/rd/ord", TABLE_DECLAR[i].COL_Ordre)
    	XMLEcrit("monXML","releveDeductions/rd/num", TABLE_DECLAR[i].COL_FACTNUMERO)
    	XMLEcrit("monXML","releveDeductions/rd/des", TABLE_DECLAR[i].COL_DESIGNATION)
    	XMLEcrit("monXML","releveDeductions/rd/mht", TABLE_DECLAR[i].COL_MHT)
    	XMLEcrit("monXML","releveDeductions/rd/tva", TABLE_DECLAR[i].COL_TVA)
    	XMLEcrit("monXML","releveDeductions/rd/ttc", TABLE_DECLAR[i].COL_TTC)
    	XMLEcrit("monXML","releveDeductions/rd/refif/if", TABLE_DECLAR[i].COL_IFFRS)
     
    	XMLEcrit("monXML","releveDeductions/rd/refif/nom", TABLE_DECLAR[i].COL_NOMFRS)
    	XMLEcrit("monXML","releveDeductions/rd/refif/ice", TABLE_DECLAR[i].COL_ICEFRS)
    	XMLEcrit("monXML","releveDeductions/rd/tx", TABLE_DECLAR[i].COL_TAUX)
    	XMLEcrit("monXML","releveDeductions/rd/mp", TABLE_DECLAR[i].COL_TAUX)
    	XMLEcrit("monXML","releveDeductions/rd/id", TABLE_DECLAR[i].COL_IDPAIEMENT)
    	XMLEcrit("monXML","releveDeductions/rd/dfac", TABLE_DECLAR[i].COL_DATE_FACT)
     
     
     
    FIN
    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    En fait, vous écrasez toutes vos lignes successives parce que vous ne vous déplacez pas dans le document.

    Voir l'aide sur XMLEcrit
    Remarques
    La fonction XMLEcrit ne modifie pas la position courante dans le document.
    Voir aussi, toujours dans l'aide, Gestion XML : Exemple d'utilisation

    Bonnes lecture et bon travail

    Hmegé

  3. #3
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    as-tu essayé avec des chemins en "absolu" :
    avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    XmlDocument("monXML")
    XMLEcrit("monXML","/releveDeductions/rd/ord", "TABLE_DECLAR[i].COL_Ordre")
    XMLEcrit("monXML","/releveDeductions/rd/num", "TABLE_DECLAR[i].COL_FACTNUMERO")
    XMLEcrit("monXML","/releveDeductions/rd/des", "TABLE_DECLAR[i].COL_DESIGNATION")
    XMLEcrit("monXML","/releveDeductions/rd/mht", "TABLE_DECLAR[i].COL_MHT")
    XMLEcrit("monXML","/releveDeductions/rd/tva", "TABLE_DECLAR[i].COL_TVA")
    XMLEcrit("monXML","/releveDeductions/rd/ttc", "TABLE_DECLAR[i].COL_TTC")
    XMLEcrit("monXML","/releveDeductions/rd/refif/if", "TABLE_DECLAR[i].COL_IFFRS")
     
    XMLEcrit("monXML","/releveDeductions/rd/refif/nom", "TABLE_DECLAR[i].COL_NOMFRS")
    XMLEcrit("monXML","/releveDeductions/rd/refif/ice", "TABLE_DECLAR[i].COL_ICEFRS")
    XMLEcrit("monXML","/releveDeductions/rd/tx", "TABLE_DECLAR[i].COL_TAUX")
    XMLEcrit("monXML","/releveDeductions/rd/mp", "TABLE_DECLAR[i].COL_TAUX")
    XMLEcrit("monXML","/releveDeductions/rd/id", "TABLE_DECLAR[i].COL_IDPAIEMENT")
    XMLEcrit("monXML","/releveDeductions/rd/dfac", "TABLE_DECLAR[i].COL_DATE_FACT")
    fSauveTexte("f:\temp\exemple.xml", XMLConstruitChaîne("monXML",XMLDocumentDéfaut,XMLEncodageIso8859_1))
    XMLTermine("monXML")
    j'obtiens ceci :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <releveDeductions>
    <rd>
    <ord>TABLE_DECLAR[i].COL_Ordre</ord>
    <num>TABLE_DECLAR[i].COL_FACTNUMERO</num>
    <des>TABLE_DECLAR[i].COL_DESIGNATION</des>
    <mht>TABLE_DECLAR[i].COL_MHT</mht>
    <tva>TABLE_DECLAR[i].COL_TVA</tva>
    <ttc>TABLE_DECLAR[i].COL_TTC</ttc>
    <refif>
    <if>TABLE_DECLAR[i].COL_IFFRS</if>
    <nom>TABLE_DECLAR[i].COL_NOMFRS</nom>
    <ice>TABLE_DECLAR[i].COL_ICEFRS</ice>
    </refif>
    <tx>TABLE_DECLAR[i].COL_TAUX</tx>
    <mp>TABLE_DECLAR[i].COL_TAUX</mp>
    <id>TABLE_DECLAR[i].COL_IDPAIEMENT</id>
    <dfac>TABLE_DECLAR[i].COL_DATE_FACT</dfac>
    </rd>
    </releveDeductions>

    ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  4. #4
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Je me permets de m'insérer dans le fil de discussion pour savoir s'il existe une solution native à windev (sans passer par des API windows ou .net) afin d'indenter correctement le contenu XML résultant d'un XmlConstruitChaine() ?

    Cdt.
    Google est ton ami !

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Citation Envoyé par LeonCosnyd Voir le message
    existe une solution native à windev afin d'indenter correctement le contenu XML résultant d'un XmlConstruitChaine() ?
    Bonjour,

    Un fichier XML n'est pas indenté et il faut passer par un utilitaire de 'présentation' pour ce faire.
    Windev ne fournit aucune solution.
    Comme souvent, on aborde une matière et on ne va pas au bout, notamment en nous fournissant les utilitaires qui nous permettraient de vraiment développer plus vite.

    La seule aide que je connaisse est ce billet du blog : Mise en forme d'un document XML généré par les fonctions XML*, ou une variable de type XMLDocument

    Mais ce n'est pas très compliqué avec une petite procédure récursive qui incrémente le niveau chaque fois qu'on passe au niveau inférieur et le décrémente quand on en revient, ce niveau servant à gérer la marge.

    Ci-dessous, une solution basée sur les variables de type XML, pas encore définitive, mais qui fonctionne et est déjà assez versatile.
    On peut notamment gérer la largeur des indentations, pour les cas où les niveaux d'imbrication sont nombreux.

    Déclarations globale de la fenêtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gNomen24 est un xmlDocument, description = "nnn.xsd" 
    gNomen24 = XMLOuvre("nnn.xml", depuisFichier)
    Dans un bouton, par exemple
    Procédure globale xmlParcours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // Résumé : <indiquez ici ce que fait la procédure>
    // Syntaxe :
    //xmlParcours (<prmDoc> est xmlDocument)
    //
    // Paramètres :
    //	prmDoc (xmlDocument) : <indiquez ici le rôle de prmDoc>
    // Valeur de retour :
    // 	Aucune
    //
    // Exemple :
    // Indiquez ici un exemple d'utilisation.
    //
    PROCEDURE xmlParcours(prmDoc est un xmlDocument) 
    sParcoursErr est une chaîne 
     
    SI prmDoc..NoeudRacine..Occurrence <> 1 ALORS 
    	//on traite l'erreur 
    SINON 
    	//on lit 
    	POUR TOUT unNoeud DE prmDoc..NoeudRacine 
    		xmlNoeudDétail(unNoeud, 0, sParcoursErr, Vrai, Vrai, -1) 
    	FIN 
     
    FIN
    Procédure globale xmlNoeudDétail
    Ne pas oublier d'activer le traitement automatique des exceptions dans l'entête de la procédure (voir ligne 25)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    // Résumé : <indiquez ici ce que fait la procédure>
    // Syntaxe :
    //xmlNoeudDétail (<prmNoeud> est xmlNoeud, <prmNiveau> est entier, <prmLogErreur> est chaîne, <prmValidScan> est booléen [, <prmTrace> est booléen [, <prmTab> est entier [, <prmNiveauLimite> est entier]]])
    //
    // Paramètres :
    //	prmNoeud (xmlNoeud) : <noeud à analyser>
    //	prmNiveau (entier) : <Niveau d'imbrication>
    //	prmLogErreur (chaîne ANSI) : <indiquez ici le rôle de sPrmLogErreur>
    //	prmValidScan (booléen) : <Limite la trace aux erreurs de validité détectées par rapport au XSD - Vrai force prmTrace à Faux>
    //	prmTrace (booléen - valeur par défaut=1) : <gestion du 'trace' des noeuds : trace / pas trace>
    //	prmTab (entier - valeur par défaut=-1) : <gestion du 'trace' : décalage des imbrications>
    //	prmNiveauLimite (entier - valeur par défaut=100) : <Contrôle le niveau d'imbrication (et donc de récursivité) maximum>
    // Valeur de retour :
    // 	Aucune
    //
    // Exemple :
    // Indiquez ici un exemple d'utilisation.
    // Notes :
    //	prmTab : définit la largeur de tabulation et, le cas écéhant, son annulation
    //			-1 : tabulation standard (valeur par défaut)
    //			=0 : pas de tabulation et donc pas de marge possible
    //			>0 : nombre d'espaces par tabulation 
    //	prmNiveauLimite : permet d'éviter une erreur consécutive à un "dépassement de la pile d'exécution" ...
    // 					(variable entre 113 et 600 suivant versions et tests ...)
    // Traitement automatique des exceptions :   exécuter le bloc de code CAS EXCEPTION:
    //
     
    PROCEDURE xmlNoeudDétail(prmNoeud est un xmlNoeud, prmNiveau est entier, prmLogErreur est une chaîne, ...
    prmValidScan est un booléen, prmTrace est un booléen = Vrai, prmTab est un entier = -1, prmNiveauLimite est entier = 100) 
     
     
    	sMarge est une chaîne 
    	sTabul est une chaîne 
    	sAttrib est une chaîne="" 
    	sTypeNoeud est une chaîne 
    	sValeur est une chaîne 
     
    	SI prmValidScan ALORS
    		prmTrace = Faux 
    	SINON 
    		SI prmTab = -1 ALORS 
    			sTabul = TAB 
    		SINON 
    			sTabul = Répète(" ", prmTab)  
    		FIN 
    		sMarge = Répète(sTabul, prmNiveau) 
    	FIN
     
    	SI prmTrace ALORS Trace(sMarge + "Noeud : " + prmNoeud..Nom )
     
    	SELON prmNoeud..Type 
    		CAS XMLBalise 
    			sTypeNoeud = "balise" 
    		CAS XMLTexte 
    			sTypeNoeud = "texte" 
    		CAS XMLCDATA 
    			sTypeNoeud = "CDATA" 
    		AUTRE CAS 
    			STOP 
    	FIN 
     
    	SI prmTrace ALORS Trace(sMarge + "Type : " + sTypeNoeud) 
    	SI prmTrace ALORS Trace(sMarge + "Attribut(s) : " + prmNoeud..Attribut..Occurrence) 
    	SI prmNoeud..Attribut..Occurrence > 0 ALORS 
    		POUR TOUT unAttribut DE prmNoeud..Attribut 
    			sAttrib += UnicodeVersAnsi(unAttribut..Nom) + " = " + UnicodeVersAnsi(unAttribut..Valeur) + RC 
    		FIN 
    		sAttrib = Gauche(sAttrib, Taille(sAttrib) - 2)  //RC = 2 car. 
    		SI prmTrace ALORS Trace(sMarge + Répète(" ", Taille("Attribut(s) : ")) + sAttrib)
    	FIN 
    	SI prmTrace ALORS Trace(sMarge + "Fils : " + prmNoeud..NoeudFils..Occurrence) 
    	SI prmTrace ALORS Trace(sMarge + "Texte : " + prmNoeud..Texte) 
    	sValeur = prmNoeud..Texte //cette ligne n'est utile que si on veut ne tracer que les erreurs, avec prmValidScan = Vrai
     
     
    SI prmNoeud..NoeudFils..Occurrence > 0 ALORS 
    	prmNiveau++ 
    	SI prmNiveau <= prmNiveauLimite ALORS 
    		POUR TOUT NoeudFils DE prmNoeud 
    			xmlNoeudDétail(NoeudFils, prmNiveau , prmLogErreur, prmValidScan, prmTrace , prmTab, prmNiveauLimite) //Appel récursif !! 
    		FIN 
    	SINON 
     
    		Info("Limite d'imbrication (" + NumériqueVersChaîne(prmNiveauLimite) + ") dépassée.", "Abandon du traitement.") 	
    	FIN 
    	prmNiveau-- 
    FIN 
     
     
    CAS EXCEPTION: 
    //	stop 
    	SI prmTrace ALORS Trace("<ERREUR>") 
    	SI prmTrace ALORS Trace(ExceptionInfo(errCode)) 
    	Trace(ExceptionInfo(errRésumé)) 
    	SI prmTrace ALORS Trace("</ERREUR>") 
    	prmLogErreur += ExceptionInfo(errLigne) +  " : " + prmNoeud..Nom + " - " + ExceptionInfo(errRésumé) + RC
    Bonnes indentations !

    Hemgé

  6. #6
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Merci pour cette réponse. J'avais effectivement déjà vu le billet sur le blog de PcSoft. Cela permet un minimum de mise en forme mais n'indente pas les tabulations...
    J'avais cependant oublié leur "explication" pour se justifier de ne pas mettre de mise en forme par défaut.

    La seule solution est donc de créer sa propre procédure qui parcours le XML par niveau pour rajouter les tab. votre exemple est très bien, il ne manque plus qu'à gérer une chaine de caractères à renvoyer à la fin pour pouvoir le sauver dans un fichier XML.
    Google est ton ami !

  7. #7
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    pour l'indentation du xml sous windev voir aussi ici


    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  8. #8
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Merci Jurassic Pork. J'avais déjà lu un de tes messages où tu donnais une solution en passant par une méthode .net. J'ai toujours du mal à insérer des éléments externes à Windev car souvent cela implique de vérifier/installer la version du framework installer sur la machine (.net 2.0 ou .net 4.0) ....
    Google est ton ami !

  9. #9
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    Encore J.P ... je le trouve un peu beaucoup OLE OLE !! Oui quoi, ce n'est pas toujours NET ses trucs. Ouais !

    Plus sérieusement, en suivant les discussions, il apparaît que NET, API, OLE etc posent plusieurs problèmes à nombre de membres (et donc statistiquement à encore plus de lecteurs passifs) :
    - on n'en connaît pas la base et l'abord n'est pas évident, sauf gros investissement en temps, ce qui en rebute plus d'un qui est venu à Windev notamment pour se simplifier la vie ... ;
    - si on adopte la solution gracieusement proposée par J.P, comment va-t-on la maintenir ou même, souci plus immédiat, l'intégrer ce qui en dissuade plus d'un de même tenter le test ;
    - quel doit être l'environnement précis et comment va-t-on le garantir en distribution ?

    Par ailleurs, il est encore moins évident de gérer les exceptions spécifiques de ces environnements.
    Je me pose aussi la question de la surcharge éventuelle et de l'impact sur les performances (pour autant que ce souci soit pertinent en fonction des besoins ou circonstances d'exploitation).

    C'est pour cela que j'essaie de proposer ici des solutions essentiellement 'Windev'.

    Même si, oui, oui, J.P, je me tourne de plus en plus vers des moyens plus NET pour remédier aux inaboutissements et insuffisances de Windev.
    Faute de quoi, ce serait trop frustrant par moments.

  10. #10
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Encore J.P ... je le trouve un peu beaucoup OLE OLE !! Oui quoi, ce n'est pas toujours NET ses trucs. Ouais !
    Google est ton ami !

  11. #11
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    Hemgé mon but ici n'est pas de promouvoir dotnet ou autre langage mais de proposer une solution au problème posé. Il est évident que la solution en dotnet ou Olé (Café) sera toujours plus périlleuse à mettre en oeuvre qu'une solution complète en W-Langage car dépendant d'éléments extérieurs. Donc à n'utiliser les solutions Dotnet que si il n'existe pas de solution équivalente en W-Language et qu'on maitrise totalement les O.S où le programme doit être installé.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo