Lire et éditer un fichier xml qui comporte des array

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
milouse95
Niveau 1
Niveau 1
Messages : 14
Enregistré le : mar. 12 juin 2012 16:26
Status : Hors ligne

Lire et éditer un fichier xml qui comporte des array

#1

Message 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
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

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

#2

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
milouse95
Niveau 1
Niveau 1
Messages : 14
Enregistré le : mar. 12 juin 2012 16:26
Status : Hors ligne

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

#3

Message 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.
Répondre