XML lire des balises
Le
Roumégou Eric

Bonjour,
très souvent je n'utilise pas les fn XML natives pour lire un xml mais
là j'aimerais comprendre la technique.
Partons d'une table exportée au fmt XML depuis WDMAP et que je ne
veuille pas intégrer ce code xml comme une table dans l'analyse.
donc ce xml
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<?xml-stylesheet href="MATABLE.xsl" type="text/xsl"?>
<HF_DOCUMENT>
<MATABLE>
<ID_PASS>807</ID_PASS>
<CODE_CLIENT>4USINFO</CODE_CLIENT>
<NOM>REGIANNI</NOM>
<PRENOM>Serge</PRENOM>
<JOUR>20061111</JOUR>
<EMPLOI>Chanteur</EMPLOI>
</MATABLE>
<MATABLE>
<ID_PASS>808</ID_PASS>
<CODE_CLIENT>4USINFO</CODE_CLIENT>
<NOM>ARMENIERE</NOM>
<PRENOM>PAUL</PRENOM>
<JOUR>20061221</JOUR>
<EMPLOI>Représentant</EMPLOI>
</MATABLE>
</HF_DOCUMENT>
je veux lire tous les enregistrements de cette table et prendre
certaines balises. D'où le code
docXML="DocXML"
//Création du document XML
XMLDocument(docXML, xmlCh)
//Le document est bien au format XML ?
SI PAS ErreurDétectée ALORS
eofúux
XMLPremier(docXML)
XMLSuivant(docXML)
XMLFils(docXML)
TANTQUE PAS eof ET XMLNomElément(docXML)="MATABLE"
XMLFils(docXML) // Descend dans le niveau MATABLE
TableAjoute(Table1)
pI=TableOccurrence(Table1)
XMLRecherche(docXML,"CODE_CLIENT",XMLElément+XMLNiveauCourant);SI
XMLTrouve("DocXML") ALORS Table1.CODE_CLIENT[pI]= XMLDonnée(docXML)
XMLRecherche(docXML,"NOM",XMLElément+XMLNiveauCourant);SI
XMLTrouve("DocXML") ALORS Table1.NOM[pI]= XMLDonnée(docXML)
XMLRecherche(docXML,"EMPLOI",XMLElément+XMLNiveauCourant);SI
XMLParent(docXML) //remonte au niveau enreg
XMLSuivant(docXML) // passe au tuple suivant
SI XMLEnDehors(docXML) ALORS eof=Vrai
FIN //tantque pas eof
SINON
Erreur("Ce fichier n'est pas au format XML"+RC+errInfo)
FIN
XMLTermine(docXML)
Ok cela fonctionne mais seulement parce que mes balises CODE_CLIENT,
NOM, EMPLOI sont dans cet ordre
Si je recherche CODE_CLIENT, EMPLOI, NOM; la recherche NOM échouera.
Donc comment faire pour rechercher dans toutes les balises de MATABLE,
sans devoir respecter un ordre que je ne suis pas sensé connaitre ?
--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
très souvent je n'utilise pas les fn XML natives pour lire un xml mais
là j'aimerais comprendre la technique.
Partons d'une table exportée au fmt XML depuis WDMAP et que je ne
veuille pas intégrer ce code xml comme une table dans l'analyse.
donc ce xml
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<?xml-stylesheet href="MATABLE.xsl" type="text/xsl"?>
<HF_DOCUMENT>
<MATABLE>
<ID_PASS>807</ID_PASS>
<CODE_CLIENT>4USINFO</CODE_CLIENT>
<NOM>REGIANNI</NOM>
<PRENOM>Serge</PRENOM>
<JOUR>20061111</JOUR>
<EMPLOI>Chanteur</EMPLOI>
</MATABLE>
<MATABLE>
<ID_PASS>808</ID_PASS>
<CODE_CLIENT>4USINFO</CODE_CLIENT>
<NOM>ARMENIERE</NOM>
<PRENOM>PAUL</PRENOM>
<JOUR>20061221</JOUR>
<EMPLOI>Représentant</EMPLOI>
</MATABLE>
</HF_DOCUMENT>
je veux lire tous les enregistrements de cette table et prendre
certaines balises. D'où le code
docXML="DocXML"
//Création du document XML
XMLDocument(docXML, xmlCh)
//Le document est bien au format XML ?
SI PAS ErreurDétectée ALORS
eofúux
XMLPremier(docXML)
XMLSuivant(docXML)
XMLFils(docXML)
TANTQUE PAS eof ET XMLNomElément(docXML)="MATABLE"
XMLFils(docXML) // Descend dans le niveau MATABLE
TableAjoute(Table1)
pI=TableOccurrence(Table1)
XMLRecherche(docXML,"CODE_CLIENT",XMLElément+XMLNiveauCourant);SI
XMLTrouve("DocXML") ALORS Table1.CODE_CLIENT[pI]= XMLDonnée(docXML)
XMLRecherche(docXML,"NOM",XMLElément+XMLNiveauCourant);SI
XMLTrouve("DocXML") ALORS Table1.NOM[pI]= XMLDonnée(docXML)
XMLRecherche(docXML,"EMPLOI",XMLElément+XMLNiveauCourant);SI
XMLParent(docXML) //remonte au niveau enreg
XMLSuivant(docXML) // passe au tuple suivant
SI XMLEnDehors(docXML) ALORS eof=Vrai
FIN //tantque pas eof
SINON
Erreur("Ce fichier n'est pas au format XML"+RC+errInfo)
FIN
XMLTermine(docXML)
Ok cela fonctionne mais seulement parce que mes balises CODE_CLIENT,
NOM, EMPLOI sont dans cet ordre
Si je recherche CODE_CLIENT, EMPLOI, NOM; la recherche NOM échouera.
Donc comment faire pour rechercher dans toutes les balises de MATABLE,
sans devoir respecter un ordre que je ne suis pas sensé connaitre ?
--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
manque ;SI XMLtrouve(docXML) alors table1.EMPLOI[pi]=xmlDonnée(DocXML)
--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
moi je pratique de la sorte :
szReqXPath est une chaîne
docXML="DocXML"
//Création du document XML
XMLDocument(docXML, xmlCh)
szReqXPath = "count(/HF_DOCUMENT/MATABLE)"
SI PAS XMLExécuteXPath(docXML,szReqXPath) ALORS
Erreur("La requête XPath <"+szReqXPath+"> a échoué")
RETOUR
FIN
lNbTAG est entier = XMLRésultat(docXML)
POUR i = 1 _A_ lNbTAG
szReqXPath = "/HF_DOCUMENT/MATABLE["+i+"]"
SI PAS XMLExécuteXPath(docXML,szReqXPath) ALORS
Erreur("La requête XPath <"+szReqXPath+"> a échoué")
RETOUR
FIN
XMLFils(docXML)
TANTQUE PAS XMLEnDehors(docXML)
SELON XMLNomElément(docXML)
CAS "CODE_CLIENT" :
CAS "NOM" :
CAS "EMPLOI" :
FIN
XMLSuivant(docXML)
FIN
FIN
--
Cordialement JeAn-PhI
Bon sang mais c'est bien sûr !
oui merci j'aime mieux comme ça
je vais adopter !
--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)