Bonjour,
J'aimerais savoir s'il est possible de se placé avec Xpath et XPathNodeIterator sur une section du XML comportant un attribut?
Exemple simplifié de mon XML:
J'ai besoin de récupérer la totalité des objets qui sont dans:
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 <?xml version="1.0" encoding="utf-8"?> <Project name="XXXX"> <Product> <Type>GC</Type> </Product> <ObjectBases> <Source> <Name>EP</Name> <Section>Factory</Section> </Source> </ObjectBases> <Versions> <VId> <VName>CONFIG</VName> <VVers>5.5.4</VVers> </VId> <VId> <VName>Data base Config</VName> <VVers>V3.17</VVers> </VId> </Versions> <Section name="Section1"> <Object> <Label>Company_name</Label> <Value>0</Value> </Object> <Object> <Label>projectname</Label> <Value>XXX</Value> </Object> </Section> <Section name="Section2"> <Object> <Label>1</Label> <Value></Value> </Object> <Object> <Label>2</Label> <Value>TRUE</Value> </Object> <Object> <Label>3</Label> <Value>TRUE</Value> </Object> <Object> <Label>4</Label> <Value>TRUE</Value> </Object> </Section> <Section name="Section3"> <Object> <Label>Extra requests</Label> <Value></Value> </Object> </Section> <Section name="Section3"> <Object> <Label>MP20</Label> <Value>MUP9</Value> <Qty>2</Qty> </Object> <Object> <Label>Rectifier</Label> <Value>80</Value> <Qty>6</Qty> </Object> <Object> <Label>relays card</Label> <Value>DC167</Value> <Qty>2</Qty> </Object> </Section> <Section name="Manufacturing"> <Object> <Label>FAB</Label> <Value>7537</Value> </Object> <Object> <Label>PRE</Label> <Value>382</Value> </Object> <Object> </Section> </Project>
Project/Section name="Section2"/Object.
J'arrive sans souci a me positionner sur Projet section a l'aide de:
Ensuite j'arrive a naviguer dans le noeud
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Private _LecXML As XPathDocument Private _Navigator As XPathNavigator Private _Noeud As XPathNodeIterator Private _ExpXPath As String ----------------------------------------------- _LecXML = New XPathDocument(FilesXML) _Navigator = _LecXML.CreateNavigator() _ExpXPath = "Project/Section" _Noeud = _Navigator.[Select](_Navigator.Compile(_ExpXPath))
avec:
Mais j'aimerai pouvoir rajouté une autre boucle pour récupérer tout les <Object> ou me placé directement dessus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 If _Noeud.Count <> 0 Then _Noeud.MoveNext() For i As Integer = 0 To _Noeud.Count - 1 'Je récupère l'attribut Dim NameAtt As String = _Noeud.Current.GetAttribute("name", "") Next End If
j'ai aussi tenté de récupéré la position du noeud en court pour créer un autre XPathNodeIterator mais pour le moment sans résultat.
LE BUT:
Je souhaite soit récupérer uniquement une "Section" aillant l'attribut X pour remplir une collection de ces "Objets"
Ou
Toutes les "Section" identifier chaque attribut et replir plusieurs collection de chaque "Object"
----------------------
J'arrive à me déplacer dans les noeud avec:
_Noeud.MoveNext()
_Noeud.Current.MoveToFirstChild()
_Noeud.Current.MoveToNext()
En me déplaçant j'ai vu que le paramètre indexInParent m'indique le nombre de nœuds dans le nouveau emplacement mais je n'arrive pas a récupérer cette valeur pour l'utiliser dans une boucle.
Merci de votre aide
Partager