Répétez apres moi :J'aime PBAdonf. J'aime PBAdonf. J'aime PBAdonf.

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 28-03-2013 09:26:47

Sebastouche  
Membre Geek
Lieu: rennes
Date d'inscription: 30-01-2008
Messages: 36
Pépites: 164
Banque: 0

[RESOLU] Associer un XSD à un fichier XML

Bonjour,
J'ai un fichier sur lequel je dois associer un fichier XSD afin de vérifier son parsing.
Cà fonctionnait depuis pas mal de temps, mais on m'a transmis un cas ou l'affectation du schéma XSD purge le fichier ...
A priori cela serait dû à la balise <?xml version="1.0"?> car le fichier est correctement intégré si on la retire
Exemple fichier KO :

Code: xml

<?xml version="1.0"?>
<com xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <cod_soc>ITM</cod_soc>
  <cod_eta>COMI</cod_eta>
...
</com>

Je transmets le code qui affecte le schéma. Le GetrootElement fonctionne bien.
Il semble que ce soit le pbdom_doc.SaveDocument qui pose souci car il renvoie FALSE.
Et le PBXRuntimeError  renvoie : Exception-Error calling method of a PBNI object

Code: pb

String ls_file_xml, ls_file_xsd
PBDOM_BUILDER pbdom_bldr
pbdom_DOCUMENT pbdom_doc
PBDOM_ATTRIBUTE pbdom_attr_array[]
PBDOM_ELEMENT pbdom_elem_root
PBDOM_ATTRIBUTE pbdom_attr1 , pbdom_attr2

ls_file_xml="C:\temp\Monfichier.xml"
ls_file_xsd = Trim(GetCurrentDirectory()) + "\ITF_CMD_IN_V6R1.xsd"
TRY
pbdom_bldr = Create PBDOM_Builder

pbdom_doc = pbdom_bldr.BuildFromFile(ls_file_xml)

//on recupère le tag racine
pbdom_elem_root = pbdom_doc.getrootelement( ) 

//suppression des attributs en particulier la declaration du schema 
pbdom_elem_root.getattributes( ref pbdom_attr_array)

ll_max = upperbound (pbdom_attr_array)
 FOR ll_i =1 to ll_max
 pbdom_elem_root.removeattribute(pbdom_attr_array[ll_i] ) 
NEXT

// suppression (si elle existe) de la declaration de l'espace de nom
pbdom_elem_root.removenamespacedeclaration( pbdom_elem_root.getnamespaceprefix( ) , pbdom_elem_root.getnamespaceuri( )) 

// on met la bonne
pbdom_elem_root.addnamespacedeclaration(  "xsi", "http://www.w3.org/2001/XMLSchema-instance" )

// creation de l'attibut du schema
pbdom_attr2 = CREATE PBDOM_ATTRIBUTE

pbdom_attr2.setname( "noNamespaceSchemaLocation") 

pbdom_attr2.setnamespace( "xsi", "noNamespace" ,FALSE) 

pbdom_attr2.settext(ls_file_xsd )

pbdom_elem_root.setattribute(pbdom_attr2)

//on enregistre ces changements  
lb_xsdok = pbdom_doc.SaveDocument(ls_file_xml )

CATCH (PBDOM_EXCEPTION pbdom_except)
...
CATCH ( PBXRuntimeError re )   
...

Quelqu'un aurait une idée ?

Edit: ajout de la syntaxe PB

Dernière modification par Sebastouche (05-04-2013 14:39:53)

Hors ligne

 

#2 28-03-2013 09:35:31

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Associer un XSD à un fichier XML

Je me suis permis de rajouter la colorisation du code PB


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#3 28-03-2013 10:21:21

Sebastouche  
Membre Geek
Lieu: rennes
Date d'inscription: 30-01-2008
Messages: 36
Pépites: 164
Banque: 0

Re: [RESOLU] Associer un XSD à un fichier XML

seki a écrit:

Je me suis permis de rajouter la colorisation du code PB

Pas de souci, si çà peut me décoinçer ...

Hors ligne

 

#4 28-03-2013 11:39:42

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: [RESOLU] Associer un XSD à un fichier XML

Sebastouche a écrit:

Il semble que ce soit le pbdom_doc.SaveDocument qui pose souci car il renvoie FALSE.
Et le PBXRuntimeError  renvoie : Exception-Error calling method of a PBNI object

Je me pose trois questions

1) ça retourne FALSE ou ça lève une exception ? (à ma connaissance pas les deux en même temps).
2) c'est un changement de comportement sans modification du code ni du XSD qui cause ce problème ?
3) l’élément root avait son propre namespace, pourquoi utiliser la méthode "noNamespaceSchemaLocation" ?


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#5 28-03-2013 12:06:20

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Associer un XSD à un fichier XML

Sebastouche a écrit:

Il semble que ce soit le pbdom_doc.SaveDocument qui pose souci car il renvoie FALSE.
Et le PBXRuntimeError  renvoie : Exception-Error calling method of a PBNI object

En plus des remaques d'xlat sur le retour faux + une exception, tu montres les lignes "CATCH" dans le code PB, mais on ne voit pas de ligne "TRY" : quelle est la portion de code protégé par le TRY/CATCH ?


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#6 28-03-2013 12:21:36

Sebastouche  
Membre Geek
Lieu: rennes
Date d'inscription: 30-01-2008
Messages: 36
Pépites: 164
Banque: 0

Re: [RESOLU] Associer un XSD à un fichier XML

En réponse à vos questions :
1) ça retourne FALSE ou ça lève une exception ? (à ma connaissance pas les deux en même temps).
Ben là, çà retourne les deux ...

2) c'est un changement de comportement sans modification du code ni du XSD qui cause ce problème ?
Non, ni le code, ni le fichier XSD n'ont été modifiés.

3) l’élément root avait son propre namespace, pourquoi utiliser la méthode "noNamespaceSchemaLocation" ?
J'ai récupéré le traitement, mais les fichiers pouvant provenir de clients différents, c'est peut-être pour çà que le namespace est supprimé ?

4) quelle est la portion de code protégé par le TRY/CATCH ?
Erreur de copier-coller. J'ai ajouté le TRY

Petits détails :
- c'est en PB 10.5.2 ...
- je maitrise mal le XML ...

Seb

Hors ligne

 

#7 05-04-2013 14:38:42

Sebastouche  
Membre Geek
Lieu: rennes
Date d'inscription: 30-01-2008
Messages: 36
Pépites: 164
Banque: 0

Re: [RESOLU] Associer un XSD à un fichier XML

J'ai résolu mon souci de purge de fichier.
A priori, çà a l'air de fonctionner pour mes cas de tests.

je remplace la précédente ligne SaveDocument par le code qui suit :

Code:

ls_xml =  pbdom_doc.SaveDocumentIntoString()
pbdom_bldr2 = Create PBDOM_Builder
pbdom_doc2 = pbdom_bldr2.buildfromstring( ls_xml)
lb_xsdok = pbdom_doc2.SaveDocument(ls_file_xml)

Hors ligne

 

#8 05-04-2013 15:14:26

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Associer un XSD à un fichier XML

Gni ?


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#9 05-04-2013 15:19:42

Sebastouche  
Membre Geek
Lieu: rennes
Date d'inscription: 30-01-2008
Messages: 36
Pépites: 164
Banque: 0

Re: [RESOLU] Associer un XSD à un fichier XML

C'est à dire ?

seki a écrit:

Gni ?

Hors ligne

 

#10 06-04-2013 07:04:34

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Associer un XSD à un fichier XML

Ça paraît juste bizarre :
- tu prends le résultat sous forme xml texte de ton document
- tu le passes en source à un nouvel objet dom builder
- pour le re-sauver en xml texte...

Je trouve ça louche comme façon de "tomber en marche"


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#11 08-04-2013 07:25:44

Sebastouche  
Membre Geek
Lieu: rennes
Date d'inscription: 30-01-2008
Messages: 36
Pépites: 164
Banque: 0

Re: [RESOLU] Associer un XSD à un fichier XML

Pour débloquer une situation plus que tendue ( ), j'ai trouvé cette solution.

Cependant, je suis ouvert à toute autre proposition qui me permette de parser des fichiers XML avec un XSD.


seki a écrit:

Ça paraît juste bizarre :
- tu prends le résultat sous forme xml texte de ton document
- tu le passes en source à un nouvel objet dom builder
- pour le re-sauver en xml texte...

Je trouve ça louche comme façon de "tomber en marche"

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22