Pb pour récupérer un attribut dans un fichier XML

cs_Eric25 Messages postés 175 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 26 juin 2006 - 24 août 2005 à 15:11
cs_Eric25 Messages postés 175 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 26 juin 2006 - 25 août 2005 à 14:34
Bonjour, je dois lire un fichier XML et remplir une TreeView avec certains éléments de ce fichier.
J'ai consulté l'ensemble des sources sur la manière de lire un fichier XML et de rechercher des éléments.
J'arrive tant bien que mal à effectuer une recherche mais je n'arrive pas à récupérer un des attributs du noeud sur lequel je me trouve.

Voici un extrait de mon code (je dois récupérer les attributs transactionId et transactionStatus de l'element transactionNotifications ce que j'ai fait, puis je dois ensuite récupérer l'attribut gtin de l'element wwre:cipKeys ce que je n'arrive pas à faire)

dim oXmlDom As MSXML2.DOMDocument40
Set oXmlDom = New MSXML2.DOMDocument40
'Chargement du document
oXmlDom.Load (TxtChe.Text)

'Elements DOM
Dim xTransaction As IXMLDOMElement
Dim xTra As IXMLDOMElement

'Listes de noeuds DOM
Dim ListeDeNoeuds As IXMLDOMNodeList
Dim ListeDeNoeuds2 As IXMLDOMNodeList

'Noeuds DOM
Dim NoeudRecherché As IXMLDOMNode
Dim NoeudRecherchéFils As IXMLDOMNode


Dim i As Integer
i = 1
For Each xTransaction In oXmlDom.getElementsByTagName("transactionNotifications")
'Alimentation du noeud pere (transaction)
Set NoeudPere = TVTra.Nodes.Add() NoeudPere.Text xTransaction.getAttribute("transactionId") & " " & xTransaction.getAttribute("transactionStatus")
NoeudPere.Tag = i
NoeudPere.Image = 1
NoeudPere.Bold = True
'Je récupère la liste de noeuds de xTransaction
Set ListeDeNoeuds = xTransaction.childNodes

Dim test As IXMLDOMAttribute
For Each NoeudRecherché In ListeDeNoeuds
If NoeudRecherché.nodeName = "record" Then
Set ListeDeNoeuds2 = NoeudRecherché.childNodes
For Each NoeudRecherchéFils In ListeDeNoeuds2 If NoeudRecherchéFils.nodeName "wwre:cinKeys" Or NoeudRecherchéFils.nodeName "wwre:cipKeys" Then
'Alimentation du noeud fils (gtin)
Set NoeudFils = TVTra.Nodes.Add(NoeudPere, tvwChild)

NoeudFils.Text = ????? .getAttribute("gtin")
NoeudFils.Tag = Fi
NoeudFils.Image = 2
NoeudFils.Bold = True
NoeudFils.EnsureVisible
End If
Next
End If
Next
Next
i = i + 1

voici un extrait de mon document XML :



<eanucc:transaction>


<entityIdentification>


02410000000000000


<contentOwner>


<gln>08000020000009</gln>


</contentOwner>


</entityIdentification>


<command>


<eanucc:documentCommand>


<documentCommandHeader type="ADD">


<entityIdentification>


02410000000000224


<contentOwner>


<gln>08000020000009</gln>


</contentOwner>


</entityIdentification>


</documentCommandHeader>


<documentCommandOperand>


<wwre:notificationMessage contentVersion="1.0" documentStructureVersion="1.3.1" lastUpdateDate="2005-08-11T07:40:15" creationDate="2005-08-11T07:40:15" documentStatus="ORIGINAL">


<fileNotifications fileStatus="RECEIVED" fileId="2000000000090">


<messages/>


</fileNotifications>


<transactionNotifications transactionId="20000000000-1" transactionStatus="FAILURE">


<messages/>


<record positionInFile="1" status="FAILURE">


<wwre:cipKeys gln="0003000000100" gtin="04000000001" tm="250" tmsubdiv="null" publishToTm="" publishToTmsubdiv="null" publishToGln="3020170000003"/>


<messages>


<message wwreFieldName="blvCIP" ruleType="GENERAL" lang="en" xpath="/envelo...">ER177: At l....</message>


<message wwreFieldName="blvCIP" ruleType="GENERAL" lang="en" xpath="/envelope/...">ER166: The it....</message>


</messages>


</record>


</transactionNotifications>


<transactionNotifications transactionId="000000002" transactionStatus="FAILURE">


<messages/>


<record positionInFile="2" status="FAILURE">


<wwre:cipKeys gln="300000000100" gtin="04000000703" tm="250" tmsubdiv="null" publishToTm="" publishToTmsubdiv="null" publishToGln="3000000000003"/>


<messages>


Merci d'avance

2 réponses

cs_JeTrouvePasDePseudo Messages postés 11 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 23 janvier 2006
24 août 2005 à 16:03
Il me semble que ton gtin n'est pas un attribut, mais un noeud.

As tu essayé : selectSingleNode("gtin").nodevalue ?

Vincent
0
cs_Eric25 Messages postés 175 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 26 juin 2006 3
25 août 2005 à 14:34
Non je n'ai pas essayé, finalement j'ai réussi a le recupérer en déclarant un attribut et en faisant de la manière suivante :

...
For Each NoeudRecherché In ListeDeNoeuds
If NoeudRecherché.nodeName = "record" Then
Set ListeDeNoeuds2 = NoeudRecherché.childNodes
For Each NoeudRecherchéFils In ListeDeNoeuds2 If NoeudRecherchéFils.nodeName "wwre:cinKeys" Or NoeudRecherchéFils.nodeName "wwre:cipKeys" Then
For Each oAttribut In NoeudRecherchéFils.Attributes
If oAttribut.Name = "gtin" Then
'Alimentation du noeud fils (gtin)
Set NoeudFils = TVTra.Nodes.Add(NoeudPere, tvwChild)
NoeudFils.Text = oAttribut.Text
NoeudFils.Image = 2
NoeudFils.Bold = True
NoeudFils.EnsureVisible
End If
Next
...
0
Rejoignez-nous