Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

XML lire des balises

3 réponses
Avatar
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=Faux
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é)

3 réponses

Avatar
Roumégou Eric
Roumégou Eric a formulé la demande :
XMLRecherche(docXML,"EMPLOI",XMLElément+XMLNiveauCourant);SI



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é)
Avatar
JeAn-PhI
Roumégou Eric avait prétendu :
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 ?



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
Avatar
Roumégou Eric
JeAn-PhI a formulé la demande :
Roumégou Eric avait prétendu :

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



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é)