![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| AS/400 Le Forum d'entraide sur IBM AS/400 - iSeries. RPG. |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Invité de passage
![]() Date d'inscription: novembre 2008
Localisation: Croix
Âge: 53
Messages: 7
|
Bonjour, je cherche depuis une étérnité à utiiser sur mon e-series le produit 5733XT1 ou quelque chose qui pourrait transformer un fichier e-ereies en document XML et vice versa.
Merci pour vos réponses. |
|
|
|
|
|
#2 (permalink) |
|
Membre chevronné
![]() Date d'inscription: novembre 2004
Localisation: Région parisienne
Messages: 615
|
Il devrait exister de nombreux produits commerciaux pour faire ce genre de conversion, sinon par programme RPG ou Cobol via "Expat", c'est aisément faisable.
__________________
Philippe |
|
|
|
|
|
#3 (permalink) | |
|
Invité de passage
![]() Date d'inscription: novembre 2008
Localisation: Croix
Âge: 53
Messages: 7
|
Citation:
Quant à "EXPAT", je ne sais pas ce que c'est ... Merci pour toute aide. |
|
|
|
|
|
|
#4 (permalink) | |
|
Invité régulier
![]() Date d'inscription: octobre 2008
Messages: 13
|
Citation:
Expat est un parser xml simple et rapide. Sinon à partir de la V5R4 le rpg a des nouveaux codes opérations et bifs : xml-into, xml-sax, %xml, %handler Il y a aussi les DB2 XML extensions, que j'ai jamais réussi à faire marcher, et dont je ne sais pas si elles sont toujours d'actualité |
|
|
|
|
|
|
#5 (permalink) | |
|
Invité de passage
![]() Date d'inscription: novembre 2008
Localisation: Croix
Âge: 53
Messages: 7
|
Citation:
Comment utilise-t-on un "PARSER" dans un pgm ?? Ou puis-je trouver de la documentation sur le "comment faire fonctionner" ce bastringue |
|
|
|
|
|
|
#6 (permalink) |
|
Invité régulier
![]() Date d'inscription: octobre 2008
Messages: 13
|
hou là ! j'imaginais plus précis que çà !
bon pour commencer, voilà un lien sur pause-café (dont je ne fais pas partie), qui explique rapidement le xml et comment utiliser les nouveautés du RPG pour le bousin: la doc du 5733XT1 bon, il y a en fait deux "parser" (analyseurs syntaxiques, lecteurs) de xml dans le produit. L'un est basé sur DOM (Document Object Model), très puissant, qui charge le document dans un arbre en mémoire, permet de faire des recherches, et de mettre à jour l'arbre, etc... Il permet par exemple au Javascript de modifié à la volée des pages HTML dans les navigateurs (changements de couleurs, déplacements, etc...) Complexe et lent, orienté objet, pas adapté du tout à ce que vous voulez faire à priori... sauf que c'est le seul moyen proposé par 5733XT1 pour écrire des documents xml. Les exemples proposés dans la doc ont l'avantage de fonctionner mais sont loin du compte pour ce qui est de tout le travail à faire pour utiliser la chose. Le machin ne sait pas "vraiment" écrire du xml, il lit l'arbre et vous demande "comment je fais pour écrire ceci ?" ou un truc du genre je me souviens plus bien. Et, en v5r2 en tout cas, 5733XT1 est fais pour être utilisé en CCSID 37 (Etats-unis) plutot qu'en CCSID du job ou du système, du coup votre code est rempli de conversion de caractères dont les Etats-uniens sont "privés" l'autre parser est évenementiel , c'est SAX (Simple API for XML, le même que dans les nouveautés V5R4), déjà beaucoup plus léger il permet seulement de lire les document avec des procédures comme dans le RPG (%handler, etc) franchement je crois que le meilleur service que je peux vous rendre c'est de vous dire d'utiliser soit les nouveautés V5R4 (mais vous êtes en V5R2 ou V5R3 n'est-ce pas ?), soit d'utiliser expat (V5R1), ce que personnellement je n'ai jamais fait (les deux). et pour écrire des fichier xml les apis IFS open(), write() et close() suffise largement pour peu qu'on fasse attention au caractères spéciaux. Dernière modification par vazymimil ; 14/11/2008 à 18h52 |
|
|
|
|
|
#7 (permalink) |
|
Membre habitué
![]() Date d'inscription: mai 2008
Messages: 149
|
Salut,
Il est facile d'écire du XML, car c'est des balises devant les zones de tes enregistrements que tu peux mettre dans un fichier plat et remonter sur un pc. Pour faciliter celà, Tu peux aussi utiliser CGIDEV2 pour écrire un fichier XML, CGIDEV2 que tu peux le télécharger à cette adresse : http://www.easy400.net/easy400p/downloads.html. Après avoir installé CGIDEV2, voici un exemple d'utilisation avec du XML. D'abord on créé un fichier dans l'IFS (ex: '/XML/template2.xml') avec l'éditeur que tu veux : Code :
/$Fichier_Debut
<?xml version="1.0" encoding="iso-8859-15"?>
<RH>
/$Service_Debut
<Service Numero="/%SrvNum%/">
<Libelle>/%SrvLib%/</Libelle>
<Effectifs>/%SrvNbr%/</Effectifs>
/$Employes
<Employes Matricule="/%EmpMat%/">
<Nom>/%EmpNom%/</Nom>
<Poste>/%EmpPoste%/</Poste>
<Salaire>/%EmpSalaire%/</Salaire>
<Age>/%EmpAge%/</Age>
</Employes>
/$Service_Fin
</Service>
/$Fichier_Fin
</RH>
Code :
H DFTACTGRP(*NO)
/copy hspecsbnd
/copy prototypeb
/copy usec
DDS_Employes E DS extname(EMPLOYES)
D Qualified
DDS_Services E DS extname(SERVICES)
D Qualified
D Sav_Service S like(Service)
D inz(*Hival)
D Effectifs S 5 0
DResultat DS
D Mat like(DS_Employes.Mat)
D Nom like(DS_Employes.Nom)
D Poste like(DS_Employes.Poste)
D Salaire like(DS_Employes.Salair)
D Age 3 0 inz(0)
D Service like(DS_Employes.Srv)
D Libelle like(DS_Services.NomSrv)
/free
SetNoDebug(*OFF);
getHtmlIfsMult( '/XML/template2.xml' );
// On écrit l'entête de fichier
wrtsection('Fichier_Debut');
// On fait un curseur pour lire les employes
Exec Sql Declare c1 cursor for
Select e.mat, e.nom, e.poste, e.salair,
Year(Curdate()-e.DatNai), e.srv, s.nomsrv
From EMPLOYES e, SERVICES s
Where e.Srv=s.Srv
Order by Srv, Mat;
Exec Sql Open c1;
Dow SQLSTT = '00000';
Exec Sql fetch next from c1 into :Resultat;
If SQLSTT = '00000';
// On écrit la fin de Service si changement de Service
// Puis on écrit l'entête de Service
If Not (Service = Sav_Service);
// Récupération des Effectifs pour le Service
Exec SQL Select count(*)
into :Effectifs from EMPLOYES
Where Srv=:Service;
If Not (Sav_Service = *Hival);
wrtsection('Service_Fin');
EndIf;
updHtmlVar('SrvNum' : Service );
updHtmlVar('SrvLib' : Libelle );
updHtmlVar('SrvNbr' : %char(Effectifs) );
wrtsection('Service_Debut');
Sav_Service = Service;
EndIf;
updHtmlVar('EmpNom' : Nom );
updHtmlVar('EmpPoste' : Poste );
updHtmlVar('EmpSalaire': %editc(Salaire: 'K'));
updHtmlVar('EmpAge' : %Char(Age) );
wrtsection('Employes');
EndIf;
EndDo;
wrtsection('Service_Fin');
wrtsection('Fichier_Fin');
Exec Sql Close c1;
WrtHtmlToStmf('/XML/resultat2.xml': 819);
*inlr = *on;
/end-free
Code :
<?xml version="1.0" encoding="iso-8859-15"?>
<RH>
<Service Numero="A00">
<Libelle>Direction générale</Libelle>
<Effectifs>1</Effectifs>
<Employes Matricule="120">
<Nom>JEAN-PAUL</Nom>
<Poste>COMPTABLE</Poste>
<Salaire>57,191.40</Salaire>
<Age>56</Age>
</Employes>
</Service>
<Service Numero="B01">
<Libelle>PLANNING</Libelle>
....
</Employes>
</Service>
</RH>
Deux types de PARSERs différents existent comme expliqué précédemment: DOM et SAX. La V5R4 permet d'avoir ces parsers en RPG, et pour les versions antérieures, en RPG il faut utiliser EXPAT. Sinon, un parser DOM existe en COBOL bien avant la V5R4. Tu peux aussi utiliser un PARSER JAVA, appelable à travers un RPG faisant appel à des classes, tu trouveras des exemples sur le net. Dernière modification par K2R400 ; 15/11/2008 à 17h11 |
|
|
|
|
![]() |
![]() |
||
e-Series et XML : mode d'emploi
|
||
| Outils de la discussion | |
|
|