[R] Probleme avec _XMLDomWrapper_.au3

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
A2Energie
Niveau 5
Niveau 5
Messages : 146
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

[R] Probleme avec _XMLDomWrapper_.au3

#1

Message par A2Energie »

Bonjour amis autoitiens,

Voici plusieurs jours que je bataille avec un problème rencontré lorsque je souhaite supprimer un éléments d'un Fichier XML.

J'utilise la fonction externe _XMLDomWrapper_.au3 pour gérer un fichier XML.
Mon code fonctionne très bien semble t-il et la pluspart des suppressions se passent très bien également,
Cependant des fois, sans raison, un élément ne peut être supprimé car un message d'erreur s'affiche. (ci-dessous)
Pour info, l'élément est bien supprimé, donc le script supprime bien l'élément,

Message d'erreur :
Line 1185 (Fil...)
Func _XMLGetChildNodes($strPath)
Func _XMLGetChildNodes($strPath)^ERROR
Error : Array variable has incorrect number of subscripts or subscript dimension range exceeded.

Mon fichier XML :

Code : Tout sélectionner

<Secteur30>
  <C0103Keldervoircom> <Nom>En att 01.03 B Kelder(voir com)</Nom>
    <Type>B</Type>
    <Cree>2014/01/29 10:28:41</Cree>
    <Att> </Att>
  </C0103Keldervoircom>
</Secteur30>
 
C'est : <C0103Keldervoircom> que je souhaite supprimer, ainsi que ces éléments enfants.

Mon ptit bout de code :

Code : Tout sélectionner

_XMLDeleteNode("/Suivi/Secteur" & $TEMP & "/" & _XMLGetChildNodes("/Suivi/Secteur" & $TEMP)[$i]) ; Suppression du dossier
 
_XMLDeleteNode sert à supprimer. la suite étant le chemin pour parvenir à l'élément à supprimer.

Le code de la fonction _XMLDomWrapper_.au3 :

Code : Tout sélectionner

; #FUNCTION# ===================================================================
; Name ..........: _XMLGetChildNodes
; Description ...: Selects XML child Node(s) of an element based on XPath input from root node.
; Syntax.........:  _XMLGetChildNodes($strXPath)
; Parameters ....: $strXPath      - The xml tree path from root node (root/child/child..)
; Return values .: Success        - An array of Nodes, count in [0] element.
;                  Failure        - -1 and @error set to 1.
; Author ........: Stephen Podhajecki <gehossafats@netmdc.com>
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......; [yes/no]
; ==============================================================================
Func _XMLGetChildNodes($strXPath)
        If Not IsObj($objDoc) Then
                _XMLError("No object passed to function _XMLGetChildNodes")
                Return SetError(1, 20, -1)
        EndIf
        Local $objNodeList, $arrResponse[1], $xmlerr
        $objNodeList = $objDoc.selectSingleNode($strXPath)
        If Not IsObj($objNodeList) Then
                _XMLError(@LF & "No Matching Nodes found")
                $arrResponse[0] = 0
                Return SetError(1, 0, -1)
        EndIf
        If $objNodeList.hasChildNodes() Then
                For $objChild In $objNodeList.childNodes()
                        If $objChild.nodeType() = $NODE_ELEMENT Then
                                _DebugWrite($objChild.NamespaceURI & "::" & $objChild.baseName & @LF)
                                _XMLArrayAdd($arrResponse, $objChild.baseName)
                        EndIf
                Next
                $arrResponse[0] = UBound($arrResponse) - 1
                Return $arrResponse
        EndIf
        $arrResponse[0] = 0
        $xmlerr = @LF & "No Child Nodes found"
        _XMLError("Error Selecting Node(s): " & $strXPath & $xmlerr)
        Return SetError(1, 0, -1)
EndFunc   ;==>_XMLGetChildNodes
 
Je ne sais pas si qq pourra m'aider ou au moins m'éguiller.
Mais pour ma part, je bloque complet :)

Merci par avance,
Modifié en dernier par A2Energie le mer. 05 févr. 2014 16:17, modifié 1 fois.
Avatar du membre
A2Energie
Niveau 5
Niveau 5
Messages : 146
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

Re: [..] Probleme avec _XMLDomWrapper_.au3

#2

Message par A2Energie »

Re bonjour,

Après de nombreux tests,
J'ai l'impression que mon script perds la connexion avec le fichier XML.
Car ce dernier est situé sur un autre pc en réseau local.

Je pense que pendant un court instant mais suffisant pour créer une erreur le XML en question n'ai plus visible.

il faut donc que je modifie en profondeur mon script ou celui de la fonction _XMLGetChildNodes($strXPath)

Je vais voir...
Avatar du membre
A2Energie
Niveau 5
Niveau 5
Messages : 146
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

Re: [..] Probleme avec _XMLDomWrapper_.au3

#3

Message par A2Energie »

Bon ben voila j'ai compris,

Il m'a fallu du temps, mais c'est comme ça la prog...
Comment expliquer ceci sans trop passer pour un imbécile, :oops:

Tout simplement, je scannait mon fichier XML,
Puis je supprimais les éléments de ce fichier XML avec la fonction _XMLGetChildNodes($strXPath) et _XMLDeleteNode

Le problème étant que lorsque je supprimais un élément, la position des éléments suivants est modifiée.

Ex :
- Elem [1] <A></A>
- Elem [2] <B></B>
- Elem [3] <C></C>
...

Si je supprime l'élément <A>, l'élément <B> ne se trouvera plus en position [2] mais désormais en position [1]

Voilà, donc il suffit de scanner le fichier XML par la fin et non pas par le début.

Désolé pour le dérangement,
eric
Niveau 5
Niveau 5
Messages : 177
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

Re: [R] Probleme avec _XMLDomWrapper_.au3

#4

Message par eric »

Bonjour A2Energie,

Je trouve ça plutôt bien et courageux de se rendre compte que l'on était à côté de la plaque et surtout de le signaler. :wink:
Répondre