Ecriture dans un fichier XML (Problème de Xpath?)

Résolu
cs_ov3rdoze Messages postés 414 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 23 septembre 2014 - 5 avril 2007 à 10:32
cs_ov3rdoze Messages postés 414 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 23 septembre 2014 - 30 mai 2007 à 09:38
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

cs_drahcir Messages postés 745 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 15 septembre 2009 4
30 mai 2007 à 09:27
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 />
@+  
3
cs_ov3rdoze Messages postés 414 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 23 septembre 2014
30 mai 2007 à 09:38
Bonjour

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

En tout cas merci pour ta réponse
0
Rejoignez-nous