sSourceXML = fChargeTexte("C:\Temp\document.xml")
//Création du document XML
bRes = XMLDocument ("DocXML", sSourceXML)
XMLPremier("doc")
TANTQUE PAS XMLEnDehors("DocXML")
//Traitements des données
XMLSuivant("DocXML")
FIN
Quelle est la bonne formule pour lire un tel fichier ?
Merci
--
Bruno
Pour me répondre en privé, cliquez sur le lien ci-dessous :
http://cerbermail.com/?fdScpyFCsA
sSourceXML = fChargeTexte("C:Tempdocument.xml") //Création du document XML bRes = XMLDocument ("DocXML", sSourceXML) XMLPremier("doc") TANTQUE PAS XMLEnDehors("DocXML") //Traitements des données XMLSuivant("DocXML") FIN
Quelle est la bonne formule pour lire un tel fichier ?
Il faut bien déterminer le niveau de tes balises : balises parents et balises filles.
Un ordre de parcours reste dans le niveau de départ.
A priori si je comprend bien le document XML ce serait : <Order> <Date>20050208</Date> <Items> <Item LineNo="1"> <ItemID CodeType="BuyersPartNo"></ItemID> <ItemDescription>HARFOARM BL 24mm</ItemDescription> <Quantity>1</Quantity> <Width>399</Width> <Height>818</Height> <ItemReference>RMTEST1/1/1/OF></ItemReference> <ItemReference>TMP/1</ItemReference> <ItemDate></ItemDate> <GlazingDetails Leaves="1"> <Thickness>24,0</Thickness> <Leaf> <LeafID CodeType="BuyersPartNo"></LeafID> <LeafDescription>HARFOARM BL 24mm</LeafDescription> <LeafThickness>24,0</LeafThickness> </Leaf> </GlazingDetails> </Item> </Items> </Order>
Il faut bien comprendre qu'un attribut est de même niveau que la balise fille de la balise dans laquelle est contenue l'attribut.
Autrement dit :
XMLPremier("DocXML") TANTQUE PAS XMLEnDehors("DocXML") //Traitements des données XMLSuivant("DocXML") FIN
ne parcourt uniquement que la balise <order> qui est la balise racine et seule de son niveau. Pour descendre sur le niveau suivant il faudrait écrire : XMLPremier("DocXML") TANTQUE PAS XMLEnDehors("DocXML") xmlfils("DocXML") // se positionne sur le niveau suivant maVar = xmldonnée("DocXml") // récupère la valeur de date xmlsuivant("DocXMl") // arrive sur <Items> XmlFils("DocXml") // arrive sur la balise fille <Item> de <Items> ...
... XmlParent("DocXml") // remonte sur la balise parent : ici la balise <Order> XMLSuivant("DocXML") FIN
Sinon utilise directement la commande XmlRecherche() si ton document ne possèdent plusieurs fois la même balise (ce qui ne semble pas être le cas ici) avec le XmlSuivant() qui restera du même niveau que la première balise lue avec XmlRecherche().
J'espère que mon explication est assez clair.
A+
Glouton
"Bruno" <voirlasignature@aubasdumessage.com> a écrit dans le message de
news: mn.c2ce7d52c888a713.15815@aubasdumessage.com...
Je souhaite lire tous les éléments d'un fichier XML qui est de la forme
suivante :
sSourceXML = fChargeTexte("C:Tempdocument.xml")
//Création du document XML
bRes = XMLDocument ("DocXML", sSourceXML)
XMLPremier("doc")
TANTQUE PAS XMLEnDehors("DocXML")
//Traitements des données
XMLSuivant("DocXML")
FIN
Quelle est la bonne formule pour lire un tel fichier ?
Merci
--
Bruno
Pour me répondre en privé, cliquez sur le lien ci-dessous :
http://cerbermail.com/?fdScpyFCsA
Slt Bruno
Il faut bien déterminer le niveau de tes balises : balises parents et
balises filles.
Un ordre de parcours reste dans le niveau de départ.
A priori si je comprend bien le document XML ce serait :
<Order>
<Date>20050208</Date>
<Items>
<Item LineNo="1">
<ItemID CodeType="BuyersPartNo"></ItemID>
<ItemDescription>HARFOARM BL 24mm</ItemDescription>
<Quantity>1</Quantity>
<Width>399</Width>
<Height>818</Height>
<ItemReference>RMTEST1/1/1/OF></ItemReference>
<ItemReference>TMP/1</ItemReference>
<ItemDate></ItemDate>
<GlazingDetails Leaves="1">
<Thickness>24,0</Thickness>
<Leaf>
<LeafID CodeType="BuyersPartNo"></LeafID>
<LeafDescription>HARFOARM BL 24mm</LeafDescription>
<LeafThickness>24,0</LeafThickness>
</Leaf>
</GlazingDetails>
</Item>
</Items>
</Order>
Il faut bien comprendre qu'un attribut est de même niveau que la balise
fille de la balise dans laquelle est contenue l'attribut.
Autrement dit :
XMLPremier("DocXML")
TANTQUE PAS XMLEnDehors("DocXML")
//Traitements des données
XMLSuivant("DocXML")
FIN
ne parcourt uniquement que la balise <order> qui est la balise racine et
seule de son niveau. Pour descendre sur le niveau suivant il faudrait écrire
:
XMLPremier("DocXML")
TANTQUE PAS XMLEnDehors("DocXML")
xmlfils("DocXML") // se positionne sur le niveau suivant
maVar = xmldonnée("DocXml") // récupère la valeur de date
xmlsuivant("DocXMl") // arrive sur <Items>
XmlFils("DocXml") // arrive sur la balise fille <Item> de <Items>
...
...
XmlParent("DocXml") // remonte sur la balise parent : ici la balise
<Order>
XMLSuivant("DocXML")
FIN
Sinon utilise directement la commande XmlRecherche() si ton document ne
possèdent plusieurs fois la même balise (ce qui ne semble pas être le cas
ici) avec le XmlSuivant() qui restera du même niveau que la première balise
lue avec XmlRecherche().
sSourceXML = fChargeTexte("C:Tempdocument.xml") //Création du document XML bRes = XMLDocument ("DocXML", sSourceXML) XMLPremier("doc") TANTQUE PAS XMLEnDehors("DocXML") //Traitements des données XMLSuivant("DocXML") FIN
Quelle est la bonne formule pour lire un tel fichier ?
Il faut bien déterminer le niveau de tes balises : balises parents et balises filles.
Un ordre de parcours reste dans le niveau de départ.
A priori si je comprend bien le document XML ce serait : <Order> <Date>20050208</Date> <Items> <Item LineNo="1"> <ItemID CodeType="BuyersPartNo"></ItemID> <ItemDescription>HARFOARM BL 24mm</ItemDescription> <Quantity>1</Quantity> <Width>399</Width> <Height>818</Height> <ItemReference>RMTEST1/1/1/OF></ItemReference> <ItemReference>TMP/1</ItemReference> <ItemDate></ItemDate> <GlazingDetails Leaves="1"> <Thickness>24,0</Thickness> <Leaf> <LeafID CodeType="BuyersPartNo"></LeafID> <LeafDescription>HARFOARM BL 24mm</LeafDescription> <LeafThickness>24,0</LeafThickness> </Leaf> </GlazingDetails> </Item> </Items> </Order>
Il faut bien comprendre qu'un attribut est de même niveau que la balise fille de la balise dans laquelle est contenue l'attribut.
Autrement dit :
XMLPremier("DocXML") TANTQUE PAS XMLEnDehors("DocXML") //Traitements des données XMLSuivant("DocXML") FIN
ne parcourt uniquement que la balise <order> qui est la balise racine et seule de son niveau. Pour descendre sur le niveau suivant il faudrait écrire : XMLPremier("DocXML") TANTQUE PAS XMLEnDehors("DocXML") xmlfils("DocXML") // se positionne sur le niveau suivant maVar = xmldonnée("DocXml") // récupère la valeur de date xmlsuivant("DocXMl") // arrive sur <Items> XmlFils("DocXml") // arrive sur la balise fille <Item> de <Items> ...
... XmlParent("DocXml") // remonte sur la balise parent : ici la balise <Order> XMLSuivant("DocXML") FIN
Sinon utilise directement la commande XmlRecherche() si ton document ne possèdent plusieurs fois la même balise (ce qui ne semble pas être le cas ici) avec le XmlSuivant() qui restera du même niveau que la première balise lue avec XmlRecherche().