Xpath et modification attribut
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:
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:
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 |