Lire XML

Bonjour

J’écris les valeurs XML avec cette méthode :
<code 4D>
C_TEXTE(refXML)
C_TEXTE($ref1)
$filePath:=Dossier système(Bureau)+“test.xml”

refXML:=DOM Créer ref XML(“Menu”)
$ref1:=DOM Créer élément XML(refXML;“food”)

Au cas ou
: ($1=“name”)
$refChild1:=DOM Créer élément XML($ref1;“name”)
DOM ÉCRIRE VALEUR ÉLÉMENT XML($refChild1;“Belgian Waffles”)
: ($1=“price”)
$refChild2:=DOM Créer élément XML($ref1;“price”)
DOM ÉCRIRE VALEUR ÉLÉMENT XML($refChild2;5,95)
: ($1=“calories”)
$refChild4:=DOM Créer élément XML($ref1;“calories”)
DOM ÉCRIRE VALEUR ÉLÉMENT XML($refChild4;650)
Fin de cas
DOM EXPORTER VERS FICHIER(refXML;$filePath)

</code 4D>

Mais je n’arrive pas à lire les attributs name, price…etc en retour :roll:

Bonjour,

  1. n’oublie jamais le DOM FERMER xml (sinon c’est une fuite de mémoire).

  2. ensuite tu parles de lire des attributs alors que tu écris/génères un xml avec des éléments. Je comprends pas ton problème/ta question

Bonjour Bruno

Merci de ton retour.

Je me mets seulement au XML :wink:

Je souhaite pouvoir lire les valeurs…éléments :wink:

Bonjour,

Lire une valeur se fait avec DOM LIRE VALEUR ELEMENT XML.

Il faudrait que tu montres ce que tu fais pour lire si tu veux savoir ce qui cloche.
Là, ton code ecrit les valeurs.

: Matthieu LAMPERIERE

Je me mets seulement au XML
Quand on manipule de très gros fichiers xml, mieux vaut le faire avec les commandes SAX.
Je ne sais pas si c’est la cas ici
FYI

Bonjour

Oui cette méthode écrit les valeurs…

Je souhaite dans une nouvelle méthode lire maintenant… sans succès

Je souhaite savoir pour l’élément “name”, la valeur retournée est “Belgian Waffle”

C’est pour un tout petit fichier, de Préférences en l’occurrence

Il y a plusieurs façons d’y arriver. Ça dépend de ta structure xml et de comment tu veux la parcourir.

Disons que si tu pars du fichier et que tu veux aller directement lire la valeur de l’élément name, tu peux faire quelque chose comme ça :
<code 4D>
$filePath:=Dossier système(Bureau)+“test.xml”

$refRacine:=DOM Analyser source XML($filePath)
Si (OK=1)
	$refXml:=DOM Chercher élément XML($refRacine;"Menu/food/name")
	Si (OK=1)
		DOM LIRE VALEUR ÉLÉMENT XML($refXml;$valeur)
	Fin de si
	DOM FERMER XML($refRacine)
Fin de si

</code 4D>

Edit : j’avais omis un niveau de la hiérarchie. Je l’ai rajouté.

Bonjour,

ne serait ce pas plus simple et moins lourd en JSON !?

parfait merci :wink:

Il me manquait “Menu/food/name”

Une dernière question, comment faire si je souhaite uniquement modifier l’élément “Price” par exemple sans modifier le reste :?:

C’est pareil que l’exemple donné pour lire sauf que c’est DOM ECRIRE VALEUR à la place de DOM LIRE VALEUR évidemment.
Il ne faut pas oublier DOM EXPORTER VERS FICHIER juste avant DOM FERMER.

Encore merci :wink: :pray: