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 :

Modification de fichier XML


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant Sage FRP
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant Sage FRP
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Par défaut Modification de fichier XML
    Voilà j'ai un fichier XML de ce type :

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <CATALOG>
     
    	<CD>
     
    		<TITLE>Empire Burlesque</TITLE>
     
    		<ARTIST>Bob Dylan</ARTIST>
     
    		<COUNTRY>USA</COUNTRY>
     
    		<COMPANY>Columbia</COMPANY>
     
    		<PRICE>10.90</PRICE>
     
    		<YEAR>1985</YEAR>
     
    	</CD>
     
    	<CD>
     
    		<TITLE>Hide your heart</TITLE>
     
    		<ARTIST>Bonnie Tyler</ARTIST>
     
    		<COUNTRY>UK</COUNTRY>
     
    		<COMPANY>CBS Records</COMPANY>
     
    		<PRICE>9.90</PRICE>
     
    		<YEAR>1988</YEAR>
     
    	</CD>
     
    	<CD>
     
    		<TITLE>Greatest Hits</TITLE>
     
    		<ARTIST>Dolly Parton</ARTIST>
     
    		<COUNTRY>USA</COUNTRY>
     
    		<COMPANY>RCA</COMPANY>
     
    		<PRICE>9.90</PRICE>
     
    		<YEAR>1982</YEAR>
     
    	</CD>
    </CATALOG>
    J'aimerai creer une fonction en VB.NET qui pour chaque CD remplace le champs Company par la valeur des balises PRICE correspondante.

    Est ce possible de modifier le fichier XML en direct ou doit on le parser puis le réecrire ?

    Toute piste est la bienvenue !

    Merci ! =)

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Tu peux déjà utiliser la methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dataset.ReadXml(strFile)
    pour charger le fichier dans un dataset. Dès lors son parcours devient plus facile.
    Bonne chance.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  3. #3
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    A voir la version du framework que tu peux utiliser, mais si tu as accès à Linq To Xml autant s'en servir, ce sera aussi simple. Par contre il faut connaître Linq, les types anonymes... mais ce n'est pas insurmontable

    Sinon on peut aussi utiliser les classes standards pour manipuler du XML (XmlDocument). Pas besoin du DataSet en tout cas, je ne m'en suis jamais servi et encore moins pour du XML.

    Bref, retour à Linq to Xml. Voici comment charger un fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim doc As XDocument = XDocument.Load("monFichierXml.xml")
    Et pour enregistrer ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    doc.Save("nouveauFichier.xml")
    Par contre cela va ajouter par défaut la déclaration XML au début. Mais il est possible de s'en débarrasser si c'est nécessaire, en passant par un XmlWriter et XmlWriterSettings pour la sauvegarde.

    Après il reste juste à parcourir et modifier les noeuds au besoin. Par exemple la requête suivante permet de récupérer les noeuds CD du XML.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim result = From n In doc.Descendants("CD")
                 Select n;
    Dans ton cas, ce qui nous interesse ce sont les noeuds COMPANY et PRICE qui sont enfants du noeud CD. On peut donc faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim result = From n In doc.Descendants("CD")
                 Select New With {.Company = n.Element("COMPANY"), 
                                  .Price = n.Element("PRICE")}
    On crée ici un objet anonyme qui contiendra le noeud COMPANY et le noeud PRICE.
    On indique également les noms des propriétés pour accéder à ces informations (Company et Price).
    On n'indique pas le type de l'objet result (Dim sans As), il sera déterminé automatiquement.

    Au final on va obtenir un IEnumerable d'objets anonymes. Chacun représentant le couple COMPANY/PRICE d'un noeud CD. Il suffit maintenant des les parcourir et de mettre la valeur du noeud PRICE dans COMPANY
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each cd In result
        cd.Company.Value = cd.Price.Value;
    Next
    Par contre l'option Infer dont être sur ON sinon ça ne fonctionne pas. On a pas ce genre de souci en C#, encore une bonne raison de faire du C# et pas du VB.Net

    Après tu mets ça dans le bon ordre, tu adaptes au besoin, et tu as tout bon ^^

  4. #4
    Membre averti
    Homme Profil pro
    Consultant Sage FRP
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant Sage FRP
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Par défaut
    Wow super ca marche du tonnerre ! Merci beaucoup pour le coup de pouce, j'ai enfin pu réaliser une bonne partie de la modif' du xml


    Encore merci !

  5. #5
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Mes félicitations StormimOn.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  6. #6
    Membre averti
    Homme Profil pro
    Consultant Sage FRP
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant Sage FRP
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    A voir la version du framework que tu peux utiliser, mais si tu as accès à Linq To Xml autant s'en servir, ce sera aussi simple. Par contre il faut connaître Linq, les types anonymes... mais ce n'est pas insurmontable

    Sinon on peut aussi utiliser les classes standards pour manipuler du XML (XmlDocument). Pas besoin du DataSet en tout cas, je ne m'en suis jamais servi et encore moins pour du XML.

    Bref, retour à Linq to Xml. Voici comment charger un fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim doc As XDocument = XDocument.Load("monFichierXml.xml")
    Et pour enregistrer ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    doc.Save("nouveauFichier.xml")
    Par contre cela va ajouter par défaut la déclaration XML au début. Mais il est possible de s'en débarrasser si c'est nécessaire, en passant par un XmlWriter et XmlWriterSettings pour la sauvegarde.

    Après il reste juste à parcourir et modifier les noeuds au besoin. Par exemple la requête suivante permet de récupérer les noeuds CD du XML.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim result = From n In doc.Descendants("CD")
                 Select n;
    Dans ton cas, ce qui nous interesse ce sont les noeuds COMPANY et PRICE qui sont enfants du noeud CD. On peut donc faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim result = From n In doc.Descendants("CD")
                 Select New With {.Company = n.Element("COMPANY"), 
                                  .Price = n.Element("PRICE")}
    On crée ici un objet anonyme qui contiendra le noeud COMPANY et le noeud PRICE.
    On indique également les noms des propriétés pour accéder à ces informations (Company et Price).
    On n'indique pas le type de l'objet result (Dim sans As), il sera déterminé automatiquement.

    Au final on va obtenir un IEnumerable d'objets anonymes. Chacun représentant le couple COMPANY/PRICE d'un noeud CD. Il suffit maintenant des les parcourir et de mettre la valeur du noeud PRICE dans COMPANY
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each cd In result
        cd.Company.Value = cd.Price.Value;
    Next
    Par contre l'option Infer dont être sur ON sinon ça ne fonctionne pas. On a pas ce genre de souci en C#, encore une bonne raison de faire du C# et pas du VB.Net

    Après tu mets ça dans le bon ordre, tu adaptes au besoin, et tu as tout bon ^^
    J'abuse surement mais le code donne quoi en C# ?? =)

  7. #7
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par jujulips Voir le message
    J'abuse surement mais le code donne quoi en C# ?? =)
    Tu abuses oui, parce que je fais du C# et que j'avais pris le temps de le mettre en VB.Net

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    XDocument doc = XDocument.Load("monFichierXml.xml");
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    doc.Save("nouveauFichier.xml")
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var result = from n in doc.Descendants("CD")
                 select new { Company = n.Element("COMPANY"), Price = n.Element("PRICE") };
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach (var cd in result)
    {
        cd.Company.Value = cd.Price.Value;
    }

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

Discussions similaires

  1. Modifications de fichiers XML
    Par Bayard dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 21/11/2007, 08h51
  2. [BCB 6] Classe création, modification de fichier … XML
    Par almisuifre dans le forum C++Builder
    Réponses: 3
    Dernier message: 17/09/2006, 03h23
  3. Modification de fichier XML avec XSLT
    Par osmoz dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/07/2005, 11h04

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