Ecriture dans un fichier XML (Problème de Xpath?) [Résolu]

Signaler
Messages postés
414
Date d'inscription
lundi 19 juillet 2004
Statut
Membre
Dernière intervention
23 septembre 2014
-
Messages postés
414
Date d'inscription
lundi 19 juillet 2004
Statut
Membre
Dernière intervention
23 septembre 2014
-
Bonjour

J'ai un fichier admin.xml qui liste des dossiers. Le fichier à la structure suivante :

<document>
    <dossiernom="
Groupes"
proprietaire="
1"
lecture="
1"
suppression="
0"
>
        <dossiernom="
40"
proprietaire="
1"
lecture="
1"
suppression="
1"
>
        </dossier>
        <dossiernom="
41"
proprietaire="
1"
lecture="
1"
suppression="
1"
>
        </dossier>
        </dossier>
        <dossiernom="
Persos"
proprietaire="
1"
lecture="
1"
suppression="
0"
>
    </dossier>
</document>


Je voudrai ajouter un noeud dossier (comme les dossiers 40 et 41) dans le noeud Groupes.
J'ai fais une fonction mais celle-ci ajoute le nouveau noeud comme enfant de <document> juste après le noeud Groupes et pas comme enfant de <dossier nom="Groupes"...

Private
Sub MAJadminXML(
ByVal id
As
Integer)

    Dim fic
As XmlDocument =
New XmlDocument()
    fic.Load(pathXML &
"admin.xml")

    Dim elemDocument
As XmlElement = fic.CreateElement(
"dossier")

    elemDocument.SetAttribute(
"nom", id)
    elemDocument.SetAttribute(
"proprietaire", 1)
    elemDocument.SetAttribute(
"lecture", 1)
    elemDocument.SetAttribute(
"suppression", 1)

    Dim endroit
As XmlElement = fic.DocumentElement
    endroit.InsertAfter(elemDocument, endroit.SelectSingleNode(
"//dossier[@nom='Groupes'"))











    Dim tmp As XmlTextWriter = New XmlTextWriter(pathXML & "admin.xml" , Nothing )
    tmp.Formatting = Formatting.Indented
    fic.Save(tmp)
    tmp.Close()
End


Sub





J'ai essayé de modifier l'expression XPath en


//dossier[@nom='Groupes']/dossier[last()]
mais dans ce cas j'ai une erreur ArgumentException.

Si quelqu'un a une idée...

Merci d'avance

2 réponses

Messages postés
745
Date d'inscription
mardi 30 novembre 2004
Statut
Membre
Dernière intervention
15 septembre 2009
4
Salut,

je ne sais pas si tu as résolu ton problème, mais si tu utilisais 'AppendChild' plutôt que 'InsertAfter', il me semble que le noeud est directement ajouté à la fin.

Dim elemDocument As XmlElement = fic.CreateNode(XmlNodeType.Element,
"dossier",
Nothing)

fic.SelectSingleNode("//dossier[@nom='Groupes']"
).AppendChild(elementDocument)

<hr />
@+  
Messages postés
414
Date d'inscription
lundi 19 juillet 2004
Statut
Membre
Dernière intervention
23 septembre 2014

Bonjour

En fait j'avais fini par m'en sortir, avec justement le AppendChild

En tout cas merci pour ta réponse