Bonjour,

J'aimerais savoir comment faire pour lister des nœuds en particulier dans un fichier XML et modifier la valeur d'un attribut des ces nœuds.
Pour être plus précis, dans le fichier XML d'exemple ci-dessous, j'aimerais pouvoir sélectionner tous les nœuds filter dont le type est "PersistedFilter" et modifier la valeur de leur attribut oid


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
 
<?xml version="1.0" encoding="UTF-8"?>
<filters>
		<filter type="PersistedFilter" category="1" path="Ship Filters\Drawing\Object Filters\Object Types\Grid Systems\GridPlane Strong Frame" oid="{0000272E-0000-0000-3600-8C0CAC584004}">
			<askFilter/>
		</filter>
		<filter type="FlyingFilter" category="1" path="Ship Filters\Drawing\Object Filters\Object Types\Grid Systems\GridPlane Strong Frame" oid="{0000272E-0000-0000-3600-8C0CAC584004}">
			<askFilter/>
		</filter>
		<filter type="PersistedFilter" category="1" path="Ship Filters\Drawing\Object Filters\Object Types\Grid Systems\GridPlane Strong Frame" oid="">
			<askFilter/>
		</filter>
		<filter type="PersistedFilter" category="1" path="Ship Filters\Drawing\Object Filters\Object Types\Grid Systems" oid="{0000272E-0000-0000-3600-8C0CAC584005}">
			<askFilter/>
		</filter>		
</filters>
J'ai un bout de code qui me permet bien de lister les nœuds du fichier XML qui m'intéressent, mais je ne sais pas comment modifier la valeur de l'attribut oid.

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
 
    Private Sub BtnTestXML_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnTestXML.Click
        Dim xpathDoc As XPathDocument
        Dim xmlNav As XPathNavigator
        Dim ExpXPath As String
        Dim Nodes As XPathNodeIterator
        Dim oid As String
        Dim path As String
 
        Try
            xpathDoc = New XPathDocument("C:\test.xml")
 
            xmlNav = xpathDoc.CreateNavigator()
 
            'On crée ici l'expression XPath de recherche des filtres 
            ExpXPath = "//filter[@type='PersistedFilter' and @oid != '']"
            'On lance la recherche 
            Nodes = xmlNav.Select(xmlNav.Compile(ExpXPath))
            ' On vérifie si la recherche a été fructueuse
            While (Nodes.MoveNext())
                path = Nodes.Current.GetAttribute("path", "")
                oid = Nodes.Current.GetAttribute("oid", "")
                AfficherTrace("path = " & path & "; oid = " & oid)
            End While
 
 
        Catch ex As XPathException
            System.Console.WriteLine("XMLException: " + ex.Message)
        Catch ex As Exception
            System.Console.WriteLine("Exception: " + ex.Message)
        End Try
 
    End Sub