IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

APIs XML Discussion :

[DOM][.NET] Probleme de récursivité/parseur


Sujet :

APIs XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut [DOM][.NET] Probleme de récursivité/parseur
    Bonjour à tous,

    Je dois parcourir un fichier xml pour récupérer certaines informations et les afficher dans un datagridview.

    la partie du fixhier xml que je pointe avec XPath est de cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <AAA>
      <BBB>
         <CCC>
           <DDD>
             <EEE>
             </EEE>
             <FFF>
             </FFF>
          </DDD>
         </CCC>
      </BBB>
      <BBB>
         <CCC>
           <DDD>
             <EEE>
             </EEE>
             <FFF>
             </FFF>
          </DDD>
         </CCC>
      </BBB>
    </AAA>
    et voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    Imports Microsoft.VisualBasic
    Imports System.Environment
    Imports System.Xml
    Imports System.IO
    Imports System.Xml.XPath
    Imports System.Xml.Schema
    Imports System.String
     
    Public Class Form1
     
        Public documentXML As XmlDocument
        Public noeuxRacine, noeuxEnf As XmlNode
        Public noeuxEnfList As XmlNodeList
        Public elementXML, elementXML2 As XmlElement
        Public texteXML As XmlText
        Public attributXML As XmlAttribute
        Public attribCollecXML As XmlAttributeCollection
        Public pathNavigator As XPathNavigator
        Public NoeuxIterateur, NoeuxIterateur2 As XPathNodeIterator
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            Try
                documentXML = New XmlDocument               'nouveau objet XML
                documentXML.Load("C:\Documents and Settings\Administrateur\Bureau\documents thomas\licence\schneider\travail\Getex_3000\XML\sl_curan_reseau.XEF")              'mise en mémoire du projet
     
            Catch ex As XmlException
                MsgBox(ex.Message)
            End Try
        End Sub
     
        Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Try
                Dim N As Integer
                Dim M As Integer
                Dim Rang As Integer
                Dim Idx_Row As Integer = 0
                Dim Idx_Col As Integer = 0
                Dim Row(10, 20) As String
                Dim row1(6) As String
                Dim temp(10) As String
                Dim Topo_Temp As String
                Dim IP_Temp As String
                Dim Mask_Temp As String
                Dim XWay_Temp As String
     
                NoeuxIterateur = Nothing
                pathNavigator = documentXML.CreateNavigator()
                'remplissage lignes avec reférence équipemement
                NoeuxIterateur = pathNavigator.Select("//partItem[starts-with(@partNumber,'TSXETY')]")
                While (NoeuxIterateur.MoveNext())
                    Rang = NoeuxIterateur.Count()
                    Row(Idx_Row, 0) = NoeuxIterateur.Current.GetAttribute("partNumber", "")
                    NoeuxIterateur.Current.MoveToFollowing("equipInfo", "")
                    Row(Idx_Row, 1) = NoeuxIterateur.Current.GetAttribute("topoAddress", "")
                    Idx_Row = Idx_Row + 1
                End While
     
                ' Selection des Réseaux Ethernet
                NoeuxIterateur = pathNavigator.Select("//ethernet[@topoAddress]")
     
                ' Recherche des adresses IP, Masques, ...
                While (NoeuxIterateur.MoveNext())
     
                    'Mémorisation de l'adresse topologique de la carte
                    Topo_Temp = NoeuxIterateur.Current.GetAttribute("topoAddress", "")
     
                    ' Adresse IP
                    Dim NoeuxIterateur2 As XPathNodeIterator
                    NoeuxIterateur2 = NoeuxIterateur.Current.Select("//IPNetwork/IPAddress")
                    NoeuxIterateur2.MoveNext()
                    IP_Temp = Concat(NoeuxIterateur2.Current.GetAttribute("IP0", ""), ".", _
                                    NoeuxIterateur2.Current.GetAttribute("IP1", ""), ".", _
                                    NoeuxIterateur2.Current.GetAttribute("IP2", ""), ".", _
                                    NoeuxIterateur2.Current.GetAttribute("IP3", ""))
                    'NoeuxIterateur.Current.Mo()
     
                    ' Masque IP
                    NoeuxIterateur2 = NoeuxIterateur.Current.Select("//mask/IPAddress")
                    NoeuxIterateur2.MoveNext()
                    Mask_Temp = Concat(NoeuxIterateur2.Current.GetAttribute("IP0", ""), ".", _
                                    NoeuxIterateur2.Current.GetAttribute("IP1", ""), ".", _
                                    NoeuxIterateur2.Current.GetAttribute("IP2", ""), ".", _
                                    NoeuxIterateur2.Current.GetAttribute("IP3", ""))
     
                    ' Adresse XWay
                    NoeuxIterateur2 = NoeuxIterateur.Current.CreateNavigator.Select("//XWayAddress")
                    NoeuxIterateur2.MoveNext()
                    XWay_Temp = Concat(NoeuxIterateur2.Current.GetAttribute("network", ""), ".", _
                                    NoeuxIterateur2.Current.GetAttribute("station", ""))
     
                    ' Affectation des paramètres sur les cartes Ethernet correspondantes
                    For N = 0 To Idx_Row - 1
                        If InStr(Topo_Temp, Row(N, 1)) > 0 Then
                            Row(N, 2) = IP_Temp
                            Row(N, 3) = Mask_Temp
                            Row(N, 4) = XWay_Temp
                            Exit For
                        End If
                    Next
     
                End While
     
                'ajout des lignes dans le datagridview
                With Me.DataGridView1.Rows
                    .Add(Row(0, 0), Row(0, 1), Row(0, 2), Row(0, 3), Row(0, 4))
                    .Add(Row(1, 0), Row(1, 1), Row(1, 2), Row(1, 3), Row(1, 4))
                End With
     
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
     
     
        End Sub
    End Class
    Le problème est que j'arrive bien a récupérer mes valeurs mais je récupère la même adresse IP et Masque pour mes deux lignes, alors que lorsque je suis avec le débugger je me place bien dans mon noeud suivant mais ça ne me prend pas les nouvelles valeurs en compte.

    Je comprend pas pourquoi...

    Merci d'avance pour votre aide.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    Je reviens sur mon problème qui n'est toujours pas résolu mais que j'ai réussi à cerner.

    Je fais une requete XPATH pour me placer dans un nœud de mon fichier XML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                ' Selection des Réseaux Ethernet
                NoeuxIterateur = pathNavigator.Select("//ethernet[@topoAddress]")
    et a partir de cette requête je me déplace ensuite dans cette partie du fichier pour récupérer plusieurs infos

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
                ' Recherche des adresses IP, Masques, ...
                While (NoeuxIterateur.MoveNext())
     
                    'Mémorisation de l'adresse topologique de la carte
                    Topo_Temp = NoeuxIterateur.Current.GetAttribute("topoAddress", "")
     
                    ' Adresse IP
                    Dim NoeuxIterateur2 As XPathNodeIterator
                    NoeuxIterateur2 = NoeuxIterateur.Current.Select("//IPNetwork/IPAddress")
                    NoeuxIterateur2.MoveNext()
                    IP_Temp = Concat(NoeuxIterateur2.Current.GetAttribute("IP0", ""), ".", _
                                    NoeuxIterateur2.Current.GetAttribute("IP1", ""), ".", _
                                    NoeuxIterateur2.Current.GetAttribute("IP2", ""), ".", _
                                    NoeuxIterateur2.Current.GetAttribute("IP3", ""))
    End While
    Or je pensais que, vu que je m'étais placé à un nœud de mon fichier XML, lorsque je faisais un nouveau
    Dim NoeuxIterateur2 As XPathNodeIterator
    NoeuxIterateur2 = requete XPATH
    et bien cela m'effectuerai ma nouvelle requête que dans cette parti la. Et en fait non, cela reprend la totalité de mon fichier XML... (je ne sais pas si je suis bien clair )

    Donc la question que je me pose est : est-il possible d'ajouter un filtre à ma requête pour que la recherche ne se fasse pas sur la totalité du document mais bien au nœud en question ? (un filtre ou autre chose mais qui me cible un nœud précis de mon fichier pour travailler que sur ce nœud et ses enfants)

    S'il vous plait j'ai vraiment besoin d'aide la dessus et cela devient urgent !!

    Merci d'avance

Discussions similaires

  1. Réponses: 19
    Dernier message: 31/10/2005, 15h04
  2. [VB.NET] Problème checkBox et datagrid
    Par jagdjg dans le forum ASP.NET
    Réponses: 5
    Dernier message: 23/04/2004, 08h53
  3. [VS.NET] Probleme d'ancrage
    Par krachunka dans le forum Visual Studio
    Réponses: 2
    Dernier message: 22/04/2004, 14h09
  4. [VB.Net] Probleme avec dialogues (confirm et alert)
    Par crackity_jones666 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 26/11/2003, 22h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo