OVH Cloud OVH Cloud

Suppression noeud xml grace a son ID

2 réponses
Avatar
mmi
Bonjour
petits probleme je programme une fonction en VB
j'ai besoin de connaitre par une boucle for chaque id des noeud nommé "NOM"
exp xml
<a>
<NOM id=1>
<gen_date>13.4.2000</gen_date>
<name>blablabla</name>
</NOM>
<NOM id=39>
<gen_date>13.4.2000</gen_date>
<name>blablabla</name>
</NOM>
ETC... ETC
</a>


mon objectif est de pouvoir supprimer le noeud NOM correspondant a un ID
particulier

merci de bien vouloir m'aider.

Mickael

2 réponses

Avatar
Zoury
Salut Mickeal! :O)

Tu peux utiliser la librairie MSXML de microsoft pour travailler avec les
fichiers XML.

Pour l'exemple qui suit, tu dois ajouter la référence suivante :
Microsoft XML, vX.X (choisit la plus récente version)

Maintenant supposons le fichier test.xml suivant :
----
<?xml version="1.0" encoding="UTF-8"?>
<a>
<NOM id="1">
<gen_date>13.4.2000</gen_date>
<name>blablabla</name>
</NOM>
<NOM id="39">
<gen_date>13.4.2000</gen_date>
<name>blablabla</name>
</NOM>
<NOM id="40">
<gen_date>13.4.2000</gen_date>
<name>blablabla</name>
</NOM>
<NOM id="41">
<gen_date>13.4.2000</gen_date>
<name>blablabla</name>
</NOM>
</a>
----

Tu pourrais supprimer le noeud NOM où l'id = 40 comme ceci :
'***
' Module1
Option Explicit

Private Sub Main()

Call DeleteNodeNom("c:test.xml", 40)

End Sub

Private Sub DeleteNodeNom(ByRef sXMLFileName As String, ByRef nID As Long)

Dim xd As DOMDocument30
Dim xn As IXMLDOMNode

' on charge le document
Set xd = New DOMDocument30
Call xd.Load(sXMLFileName)

' on cherche le noeud à l'aide d'une requête XPath
Set xn = xd.selectSingleNode("//NOM[@id='" & CStr(nID) & "']")

' on test s'il existe
If (Not xn Is Nothing) Then
' on supprime le noeud du document
' la propriété documentElement renvoit le noeud racine <a>
Call xd.documentElement.removeChild(xn)
End If

' on sauvegarde la modification
Call xd.save(sXMLFileName)

End Sub
'***

--
Cordialement
Yanick
MVP pour Visual Basic
"mmi" a écrit dans le message de
news:427b47f8$0$812$
Bonjour
petits probleme je programme une fonction en VB
j'ai besoin de connaitre par une boucle for chaque id des noeud nommé


"NOM"
exp xml
<a>
<NOM id=1>
<gen_date>13.4.2000</gen_date>
<name>blablabla</name>
</NOM>
<NOM id9>
<gen_date>13.4.2000</gen_date>
<name>blablabla</name>
</NOM>
ETC... ETC
</a>


mon objectif est de pouvoir supprimer le noeud NOM correspondant a un ID
particulier

merci de bien vouloir m'aider.

Mickael






Avatar
Zoury
une petite précision sur la requête XPath :
Set xn = xd.selectSingleNode("//NOM[@id='" & CStr(nID) & "']")



Le @ devant id signifie que l'on cherche la valeur de l'attribut id.

Tandis que si on l'avait écrit comme ceci :
Set xn = xd.selectSingleNode("//NOM[id='" & CStr(nID) & "']")



La requête aurait tenté de cherché un noeud id dans les noeuds fils du noeud
NOM. ex :
---
<NOM>
<id>40</id>
...
---

--
Cordialement
Yanick
MVP pour Visual Basic