Page 1 sur 1

Lire et éditer un fichier xml qui comporte des array

Posté : lun. 16 août 2021 12:40
par milouse95
Bonjour,
je dois modifier un fichier xml d'une application dont je bloque sur certains points.
J'arrive à le lire et à un moment la structure, j'ai un tableau comme ci-dessous :
<InputScreenAreaArray type="array">
<ArrayElement type="map">
</ArrayElement>

<ArrayElement type="map">
</ArrayElement>

<ArrayElement type="map">
</ArrayElement>
</InputScreenAreaArray>

Si je fais par exemple
#Include <Array.au3>
#Include "_XMLDomWrapper.au3"


Global $xmlFile= "c:\temp\Wacom_Tablet.dat"
Global $root[5],$ele[5]
Global $tab_attrib[20],$tab_value[20]


if FileExists($xmlFile) <> 1 then exit msgbox(0,"Erreur",$xmlFile & " n'existe pas !")
if _XMLFileOpen($xmlFile) = 0 then exit msgbox(0,"Erreur",$xmlFile & " n'est pas un fichier xml")

$root=_XMLGetChildNodes("/InputScreenAreaArray")
_ArrayDisplay($root)


 

Je vais avoir en retour les 3 ArrayElement.
Je bloque sur comment rentrer dans les 3 ArrayElement, récupérer les valeurs et comment les modifier.

Merci d'avance,
Damien

Re: Lire et éditer un fichier xml qui comporte des array

Posté : lun. 16 août 2021 18:43
par walkson
Bonjour,
Comme cela ?
Ne pas oublier de mettre à jour les chemins

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>
<InputScreenAreaArray type="array">
	<ArrayElement type="map">
		<date>12/02/2020</date>
		<fournisseur>Dupont Jean</fournisseur>
		<réf>az14qaz</réf>
		<qté>1</qté>
	</ArrayElement>
	<ArrayElement type="map">
		<date>13/02/2020</date>
		<fournisseur>Dupont Jean</fournisseur>
		<réf>az14qaz</réf>
		<qté>1</qté>
	</ArrayElement>
	<ArrayElement type="map">
		<date>14/02/2020</date>
		<fournisseur>Dupont Jean</fournisseur>
		<réf>az14qaz</réf>
		<qté>1</qté>
	</ArrayElement>
</InputScreenAreaArray>

Code : Tout sélectionner

#include <Array.au3>
Local $oXmlDoc = ObjCreate("Msxml2.DOMDocument.6.0")
If Not IsObj($oXmlDoc) Then Exit MsgBox(0,"","Erreur")
$oXmlDoc.load(@ScriptDir & "\Document 1.xml")
	Local $array[0][0]
	$tagname = "ArrayElement"
	$objNodeList = $oXmlDoc.getElementsByTagName($tagname)
	$aa = $objNodeList.length
	Local $head
    For $x = 0 To $aa - 1
		$tt = $objNodeList.item($x).childNodes.length
		ReDim $array[$aa][$tt]
		Local $col = 0
			For $t = 0 To $tt - 1
				$array[$x][$col] = $objNodeList.item($x).childNodes.item($t).text
				$col += 1
				If $x = 0 Then $head &= $objNodeList.item($x).childNodes.item($t).nodename & "|"
				ConsoleWrite("6=>" & $objNodeList.item($x).childNodes.item($t).parentNode.text  & @CR)
			Next
	Next

	$head = StringTrimRight($head,1)
	_ArrayDisplay($array,"B",Default,64,Default,$head)
$result = $oXmlDoc.selectSingleNode('//InputScreenAreaArray/ArrayElement[date="13/02/2020"]');on sélectionne, ici la date du 13
ConsoleWrite("============================" & @CRLF)
ConsoleWrite ( $result.xml & @CRLF)
ConsoleWrite ( $result.childNodes.item(0).text & @CRLF)
$result.childNodes.item(0).text = "24/02/2025" ; on écrit
$oXmlDoc.Save(@ScriptDir & "\Document 11.xml") ; on enregistre
Si ObjCreate() retourne une erreur, utilisez l'UDF avec _XMLFileOpen() pour le récupérer

Re: Lire et éditer un fichier xml qui comporte des array

Posté : ven. 10 sept. 2021 09:37
par milouse95
Oups, mille excuses.
Je n'ai pas vu passé votre réponse. J'avais trouvé une solution mais en mode bourrin et écrivant directement dans le fichier.
Je vais m'y remettre pour tester avec votre code.
Merci de votre réponse et excusez moi de ne pas vous avoir répondu.