IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Edition fichier XML (problème séléction de noeud)


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de tbdarkspirit
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 53
    Par défaut Edition fichier XML (problème séléction de noeud)
    Bonjour,

    Je cherche à modifier certaines valeurs dans un fichier XML dont voici un extrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    34
    35
    36
    37
    38
    39
    <?xml version="1.0" encoding="utf-8"?>
    <unattend xmlns="urn:schemas-microsoft-com:unattend">
        <settings pass="windowsPE">
            <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="NonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <SystemLocale>fr-FR</SystemLocale>
                <UserLocale>fr-FR</UserLocale>
                <UILanguage>fr-FR</UILanguage>
                <UILanguageFallback>fr-FR</UILanguageFallback>
                <InputLocale>100c:0000100c</InputLocale>
                <SetupUILanguage>
                    <UILanguage>fr-FR</UILanguage>
                </SetupUILanguage>
            </component>
            <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <UserData>
                    <AcceptEula>true</AcceptEula>
                    <ProductKey>
                        <WillShowUI>OnError</WillShowUI>
                        <Key>D4F6K-QK3RD-TMVMJ-BBMRX-3MBMV</Key>
                    </ProductKey>
                </UserData>
                <Display>
                    <ColorDepth>32</ColorDepth>
                    <HorizontalResolution>1024</HorizontalResolution>
                    <VerticalResolution>768</VerticalResolution>
                </Display>
                <ImageInstall>
                    <OSImage>
                        <InstallFrom>
                            <MetaData wcm:action="add">
                                <Key>/IMAGE/INDEX</Key>
                                <Value>1</Value>
                            </MetaData>
                        </InstallFrom>
                    </OSImage>
                </ImageInstall>
            </component>
        </settings>
    </unattend>
    Admettons que je veuille modifier la valeur de <SystemLocale> en "en-EN" voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            ' Load the XmlDocument.
            Dim xd As New XmlDocument()
            xd.Load(OpenFileDialog1.FileName)
            ' Find the node
            Dim nod As XmlNode = xd.SelectSingleNode("/unattend/settings[@pass='windowsPE']/component[@name='Microsoft-Windows-International-Core-WinPE']")
            Try
                ' change the InnerText of 1st childnode.
                nod.ChildNodes(0).InnerText = "en-EN"
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
            ' Save the Xml.
            xd.Save(System.IO.Path.GetDirectoryName(OpenFileDialog1.FileName) & "/test.xml")
        End Sub
    J'obtiens l'erreur suivante :

    La référence d'objet n'est pas définie à une instance d'un objet.
    C'est sûrement tout bête, mais je ne trouve pas mon erreur... Je précise que c'est pour moi la première fois que je m'attaque à l’édition d'un fichier XML. J'ai peut-être loupé quelque chose?

    Si quelqu'un à une idée ou une suggestion pour faire la chose différemment?

    D'avance merci beaucoup pour votre aide!

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Des années que je n'ai plus fait de XPath, mais je crois que le problème vient du fait que tu n'a pas ajouté le namespace "urn:schemas-microsoft-com:unattend"

    Exemple :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     XmlNamespaceManager nsmgr = new XmlNamespaceManager(xd.NameTable);
        nsmgr.AddNamespace("ms", "urn:schemas-microsoft-com:unattend");
        var node = xd.SelectSingleNode(
            "/ms:unattend/ms:settings[@pass='windowsPE']/ms:component[@name='Microsoft-Windows-International-Core-WinPE']", nsmgr);

    Je cree un xmlnamespacemanager, j'ajoute le namespace en lui donnant un préfixe, et je fais la requète XPAth en ajoutant ce préfixe (ms dans mon exemple)

  3. #3
    Membre averti Avatar de tbdarkspirit
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 53
    Par défaut
    Salut,

    Merci beaucoup pour ta réponse! Ca marche nickel!!

    J'avoue ne pas trop comprendre comment ça marche par contre... Pourquoi faut-il mettre le préfixe devant tous les noeuds, etc.

    Mais je vais me documenter sur la chose!

    En tout cas merci infiniment! J'y ai passé des heures sans y arriver, et c'était tout simple finalement!

    Je remet le code corrigé si jamais ça peut servir à quelqu'un qui aurait le même soucis que moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            ' Load the XmlDocument.
            Dim xd As New XmlDocument()
            xd.Load(OpenFileDialog1.FileName)
            ' Find the node
            Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(xd.NameTable)
            nsmgr.AddNamespace("ms", "urn:schemas-microsoft-com:unattend")
            Dim nod As XmlNode = xd.SelectSingleNode("/ms:unattend/ms:settings[@pass='windowsPE']/ms:component[@name='Microsoft-Windows-International-Core-WinPE']", nsmgr)
     
            Try
                ' change the InnerText of 1st childnode.
                nod.ChildNodes(0).InnerText = "en-EN"
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
            ' Save the Xml.
            xd.Save(System.IO.Path.GetDirectoryName(OpenFileDialog1.FileName) & "/test.xml")
        End Sub
    Bonne fin de journée!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Editer fichier xml
    Par jedebute dans le forum ASP
    Réponses: 7
    Dernier message: 10/05/2007, 23h04
  2. [ASP][MSXML] visualisation fichier XML problème encoding
    Par RobinNono dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 12/02/2007, 14h30
  3. Edition fichier XML en asp
    Par delavega dans le forum ASP
    Réponses: 5
    Dernier message: 28/11/2006, 13h42
  4. [JDOM] Couper un fichier XML (problème de OutOfMemory)
    Par zeldoi5 dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 27/09/2006, 11h46
  5. Valider fichier XML : problème avec la DTD
    Par SkIllz2k dans le forum Valider
    Réponses: 2
    Dernier message: 26/04/2005, 17h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo