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

[WD9] Lecture fichier XML

1 réponse
Avatar
Bruno
Je souhaite lire tous les éléments d'un fichier XML qui est de la forme
suivante :

<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&gt;</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>

Je n'arrive pas à lire tout en faisant :

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

1 réponse

Avatar
Glouton
"Bruno" a écrit dans le message de
news:
Je souhaite lire tous les éléments d'un fichier XML qui est de la forme
suivante :

<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&gt;</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>

Je n'arrive pas à lire tout en faisant :

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&gt;</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