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:
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>
J'ai besoin de récupérer la totalité des objets qui sont dans:
Project/Section name="Section2"/Object.

J'arrive sans souci a me positionner sur Projet section a l'aide de:
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))
Ensuite j'arrive a naviguer dans le noeud
avec:
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
Mais j'aimerai pouvoir rajouté une autre boucle pour récupérer tout les <Object> ou me placé directement dessus.

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