none
Modification d'un fichier XML RRS feed

  • Question

  • Bonjour,

    Je travaille en VB.NET et je cherche à modifier un fichier XML dont la structure est aussi simple  que cela: 

    <RessouresScanVb>
        <nbrOpenDern>2</nbrOpenDern>
    </RessouresScanVb>

    je souhaite remplacer 2 par une autre valeur et j'ai écrit la fonction suivante: 

        ''' <summary>
        ''' Sauvegarde la valeur de la ressource spécifiée
        ''' </summary>
        ''' <param name="cNameRessource">Nom de la ressource</param>
        ''' <param name="cValueRessource">Valeur</param>
    
        Function SetValueRessource(ByVal cNameRessource As String, ByVal cValueRessource As String) As Object
            Dim oRetValue As Object = Nothing
    
            If ExistFile(cFileRes) Then
                Try
                    Dim oStream As FileStream = New FileStream(cFileRes, FileMode.Open)
                    Dim oXDoc As XmlDocument = New XmlDocument()
                    oXDoc.Load(oStream)
                    Dim oRoot As XmlElement = oXDoc.DocumentElement
    
                    For Each oParam As XmlElement In oXDoc
                        If oParam.Name = cNameRessource Then
                            oParam.Value = cValueRessource
                        End If
                    Next
    
                    oXDoc.Save(oStream)
                Catch ex As Exception
                    MsgBox(ex.Message & ex.Source)
                End Try
            End If
            Return oRetValue
        End Function


    J'obtiens le fichier suivant: 

    <RessouresScanVb>
        <nbrOpenDern>2</nbrOpenDern>
    </RessouresScanVb><RessouresScanVb>
      <nbrOpenDern>2</nbrOpenDern>
    </RessouresScanVb>
     

    c'est naturellement erroné. D'autant plus que la valeur du paramètre n'est pas 2. Pouvez-vous m'expliquer d'ou vient l'erreur de cette fonction? Comment dois-je l'écrire?

    Merci beaucoup de votre réponse.

    Cordialement

    Paul 

    lundi 20 février 2017 19:27

Réponses

  • Bonjour,
    Essayez avec XmlNode au lieu de XmlElement comme ceci:

    oXDoc.Load(oStream)
    Dim noeud As XmlNode = oXDoc.SelectSingleNode("/RessouresScanVb/nbrOpenDern")
    Dim s As String = noeud.InnerText
    noeud.InnerText = "4"
    oXDoc.Save("chemin du fichier")

    Cordialement,

    Nina


    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mardi 21 février 2017 14:58
    Modérateur

Toutes les réponses

  • Bonjour,
    Essayez avec XmlNode au lieu de XmlElement comme ceci:

    oXDoc.Load(oStream)
    Dim noeud As XmlNode = oXDoc.SelectSingleNode("/RessouresScanVb/nbrOpenDern")
    Dim s As String = noeud.InnerText
    noeud.InnerText = "4"
    oXDoc.Save("chemin du fichier")

    Cordialement,

    Nina


    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mardi 21 février 2017 14:58
    Modérateur
  • Ca marche. Merci beaucoup de votre conseil!

    Cordialement,

    P.S: Voici la fonction nouvellement écrite pour info.

        Function SetValueRessource(ByVal cNameRessource As String, ByVal cValueRessource As String) As Boolean
            Dim bRetValue As Boolean = False
    
            If ExistFile(cFileRes) Then
                Try
                    Dim oStream As FileStream = New FileStream(cFileRes, FileMode.Open)
                    Dim oXDoc As XmlDocument = New XmlDocument()
                    oXDoc.Load(oStream)
                    Dim oRoot As XmlElement = oXDoc.DocumentElement
                    Dim cExprXpath As String = "/" & oRoot.Name & "/" & cNameRessource
                    Dim noeud As XmlNode = oXDoc.SelectSingleNode(cExprXpath)
                    noeud.InnerText = cValueRessource
                    oStream.Dispose()
                    oXDoc.Save(cFileRes)
                    bRetValue = True
                Catch ex As Exception
                    MsgBox(ex.Message & ex.Source)
                End Try
            End If
            Return bRetValue
        End Function
    

    mercredi 22 février 2017 12:09