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 :

VB 2008 et XML


Sujet :

VB.NET

  1. #1
    Membre éclairé Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Par défaut VB 2008 et XML
    Bonjour,
    j'utilise Visual Studio 2008 Express et je voudrais créer un fichier xml.
    je suis donc le tuto disponible ici : http://selkis.developpez.com/tutoriels/dotnet/Xmlpart1/
    mais j'ai une erreur sur XmlElement et XmlDoc me disant qu'ils ne sont pas définis.
    Comment puis-je les définir svp ?
    merci d'avance

  2. #2
    Membre chevronné Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Par défaut
    As-tu fais l'ajout de la référence System.Xml?


  3. #3
    Membre éclairé Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Par défaut
    merci ça a corrigé le problème pour XmlElement mais pas pour XmlDoc est-ce normal ?

  4. #4
    Membre chevronné Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Par défaut
    Citation Envoyé par magicbisous-nours Voir le message
    merci ça a corrigé le problème pour XmlElement mais pas pour XmlDoc est-ce normal ?
    XmlDoc ou tu veux dire XmlDocument?

    XmlDocument fait partit du même namespace donc non tu dois pouvoir l'utiliser au même titre que XmlElement.


    Mais affiches le message d'erreur exacte que tu as ou mais un peu de code pour qu'il soit plus facile de t'aider.

  5. #5
    Membre éclairé Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Par défaut
    le code est un copier-coller à peine adapté du tuto cité au-dessus :
    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
    Dim elemVoitures As XmlElement
            elemVoitures = XmlDoc.CreateElement("VOITURES")
     
            'creation et definition de la balise marque (enfant)
            Dim elemMarque As XmlElement
            elemMarque = XmlDoc.CreateElement("MARQUE")
            elemMarque.InnerText = " Renault "
     
            'creation et definition de la balise dateachat (enfant)
            Dim elemDateAchat As XmlElement
            elemDateAchat = XmlDoc.CreateElement("DATEACHAT")
            elemDateAchat.InnerText = " 01/01/2009 "
     
            'ajout des 2 balise enfants a la balise parent 
            elemVoitures.AppendChild(elemMarque)
            elemVoitures.AppendChild(elemDateAchat)
     
            'on ajoute la balise parent au document
            XmlDoc.DocumentElement.AppendChild(elemVoitures)
     
            'Ecriture du Xml
            XmlDoc.Save(Application.StartupPath & "berline.XML")
            MsgBox("Enregistrement réussi")
    j'ai essayé de remplacer XmlDoc par XmlDocument mais j'ai une erreur :
    "Une référence à un membre non partagé requiert une référence d'objet"

  6. #6
    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
    Faut pas lire en diagonale sinon on oublie des morceaux

    Avant d'utiliser un objet, il faut penser à le déclarer et à l'instancier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'création d'une nouvelle instance du membre xmldocument
    Dim XmlDoc As XmlDocument = New XmlDocument()

  7. #7
    Membre éclairé Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Par défaut
    ok merci
    j'ai vraiment été sur ce coup !!

  8. #8
    Membre éclairé Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Par défaut
    j'ai relu correctement le tuto et j'ai vu que j'avais oublié cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlDoc.LoadXml("[lstSite][/lstSite]")
    et quand je lance le programme j'ai un message d'erreur comme celui-ci :
    "L'exception XMLException n'a pas été gérée"
    comment remédier à ça svp ?
    merci d'avance

  9. #9
    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
    La chaîne de caractères ne représente pas un contenu XML valide. C'est une erreur au niveau du tutoriel. Il faut donc remplacer les [ et ] par < et >
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlDoc.LoadXml("<lstSite></lstSite>")

  10. #10
    Membre éclairé Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Par défaut
    ok ça marche...
    mais j'ai une question :
    actuellement mon programme est un peu inutile car il écrase le fichier à chaque fois...
    comment puis-je faire si je veux qu'il le continue (tout en restant en XML) ?
    par exemple si j'ai déjà la structure :
    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
     
    <!DOCTYPE voitures [
    <!ELEMENT voitures (berline+)>
    <!ELEMENT berline (marque, dateachat, immatriculation, kilometrage, proprietaire, daterevision, kmderniererevision)>
    <!ELEMENT marque (#PCDATA)>
    <!ELEMENT dateachat (#PCDATA)>
    <!ELEMENT immatriculation (#PCDATA)>
    <!ELEMENT kilometrage (#PCDATA)>
    <!ELEMENT proprietaire (#PCDATA)>
    <!ELEMENT daterevision (#PCDATA)>
    <!ELEMENT kmderniererevision (#PCDATA)>
    ]>
     
    <voitures>
    </voitures>
    et que je veux n'ajouter que les élements (sans les perdre à chaque fois que j'enregistre) est-ce possible et si oui comment ?
    merci d'avance

  11. #11
    Membre chevronné Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Par défaut
    Tu peux utiliser Linq to Xml avec l'import System.Xml.Linq.


    Tout est là:

    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
             XmlDocument docXML = new XmlDocument();
     docXML.Load(Application.StartupPath + @"\nomFichier.xml");
     //On récupere le flux XML depuis le fichier XML
     XElement docXMLFromLinq = XElement.Load(Application.StartupPath + @"\nomFichier.xml");
     XmlNodeList nodes = docXML.SelectNodes("/racine/noeud_perso");
     //Utilisation de Linq to XML
     //le fichier XML
     
     int iMaxNodeId = 0;
     //docXMLFromLinq.Element("")
     foreach (var id in docXMLFromLinq.Elements("noeud_perso"))
     {
     int iIdNode = System.Convert.ToInt32((string)id.Attribute("noeud_persoId"));
     iMaxNodeId = Math.Max(iMaxNodeId, iIdNode);
     }
     
     //Le nouveau noeud
     XElement oNewNode =
     new XElement("noeud_perso",
     new XAttribute("noeud_persoId", iMaxNodeId+1),
     new XElement("nom_noeud_perso", "Mon_nom_toto");
     //sauvegarde du fichier XML
     docXMLFromLinq.Add(oNewNode);
     docXMLFromLinq.Save(Application.StartupPath + @"\nomFichier.xml");
     //attention Nom_de_projet : remplacer par le nom de votre projet
     String sDestinationSauvegarde = Nom_de_votre_projet.Properties.Settings.Default.ModeleTypesDeFichier;
     
     //Rien de plus facile que de supprimer un noeud :
     
     XmlDocument docXML = new XmlDocument();
     docXML.Load(Application.StartupPath + @"\nomFichier.xml");
     XmlNodeList nodes = docXML.SelectNodes("/racine_perso/nom_noeud_perso");
     foreach (XmlNode node in nodes)
     {
     foreach (XmlNode oNodeEnfant in node.ChildNodes)
     {
     if (oNodeEnfant.Name == "nomtypelong" &&
     NodeEnfant.FirstChild.InnerText == oItem.ToString())
     {
     oNodeEnfant.ParentNode.ParentNode.RemoveChild(node);
     docXML.Save(Application.StartupPath + "\nomFichier.xml");
     }
     }
     }

  12. #12
    Membre éclairé Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Par défaut
    Bonjour,
    j'ai adapté le code ci-dessus pour qu'il devienne ça :
    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
    Dim docXML As XmlDocument = New XmlDocument()
            docXML.Load(Application.StartupPath + "\berline.xml")
            'On récupere le flux XML depuis le fichier XML
            Dim docXMLFromLinq As XElement = XElement.Load(Application.StartupPath + "\berline.xml")
            Dim nodes As XmlNodeList = docXML.SelectNodes("/voitures/berline")
            'Utilisation de Linq to XML
            'le fichier XML
     
            Dim iMaxNodeId As Integer = 0
            'docXMLFromLinq.Element("")
            For Each id In docXMLFromLinq.Elements("voitures")
                Dim iIdNode As Integer = System.Convert.ToInt32(id.Attribute("Mercedes"))
                iMaxNodeId = Math.Max(iMaxNodeId, iIdNode)
            Next
     
     
            'Le nouveau noeud
            Dim oNewNode1 As XElement = New XElement("berline", New XAttribute("id", iMaxNodeId + 1), New XElement("marque", "Mercedes"))
            Dim oNewNode2 As XElement = New XElement("berline", New XAttribute("id", iMaxNodeId + 1), New XElement("dateachat", "01/01/2009"))
            Dim oNewNode3 As XElement = New XElement("berline", New XAttribute("id", iMaxNodeId + 1), New XElement("immatriculation", "123ABC38"))
            Dim oNewNode4 As XElement = New XElement("berline", New XAttribute("id", iMaxNodeId + 1), New XElement("kilometrage", "1000"))
            'sauvegarde du fichier XML
            docXMLFromLinq.Add(oNewNode1)
            docXMLFromLinq.Add(oNewNode2)
            docXMLFromLinq.Add(oNewNode3)
            docXMLFromLinq.Add(oNewNode4)
            docXMLFromLinq.Save(Application.StartupPath + "\berline.xml")
            'attention Nom_de_projet : remplacer par le nom de votre projet
            'Dim sDestinationSauvegarde As String = .Properties.Settings.Default.ModeleTypesDeFichier
    mon problème survient lorsque je créé le fichier j'ai ceci :
    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
    <?xml version="1.0" encoding="utf-8"?>
    <voitures>
      <berline id="1">
        <marque>Mercedes</marque>
      </berline>
      <berline id="1">
        <dateachat>01/01/2009</dateachat>
      </berline>
      <berline id="1">
        <immatriculation>123ABC38</immatriculation>
      </berline>
      <berline id="1">
        <kilometrage>1000</kilometrage>
      </berline>
    </voitures>
    et je voudrais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="utf-8"?>
    <voitures>
      <berline id="1">
        <marque>Mercedes</marque>
        <dateachat>01/01/2009</dateachat>
        <immatriculation>123ABC38</immatriculation>
        <kilometrage>1000</kilometrage>
      </berline>
    </voitures>
    comment puis-je faire svp ?
    merci d'avance

  13. #13
    Membre chevronné Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Par défaut
    Tu peux essayer ceci:


    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
    Dim docXML As XmlDocument = New XmlDocument()
            docXML.Load(Application.StartupPath + "\berline.xml")
     
     Dim docXMLFromLinq As XElement = XElement.Load(Application.StartupPath + "\berline.xml")
            Dim nodes As XmlNodeList = docXML.SelectNodes("/voitures/berline")
     
     Dim iMaxNodeId As Integer = 0
     For Each id In docXMLFromLinq.Elements("berline") 'j'ai pas trop compris quel noeud tu souhaites compter (voitures ou berline), voitures étant le noeud racine...
               iMaxNodeId += 1
     Next
     
     
    Dim oNewNode1 As XElement = New XElement("berline", New XAttribute("id", iMaxNodeId + 1), _
            New XElement("marque", "Mercedes"), New XElement("dateachat", "01/01/2009"), _
            New XElement("immatriculation", "123ABC38"), New XElement("kilometrage", "1000"))
     
    docXMLFromLinq.Add(oNewNode1)
     
    docXMLFromLinq.Save("E:\berline.xml")

Discussions similaires

  1. SQL SERVER 2008 -> Champ XML -> Requete sur tout le texte
    Par dacid dans le forum Développement
    Réponses: 3
    Dernier message: 14/09/2012, 15h51
  2. encodage fichier XML avec tinyxml et Visual Studio 2008 C++
    Par hal9000 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 08/04/2009, 17h14
  3. Modification de fichier XML sous vb.net 2008
    Par turican2 dans le forum VB.NET
    Réponses: 2
    Dernier message: 14/03/2009, 15h46
  4. Visual Studio 2008 Express et XML / XSLT ?
    Par fgachet dans le forum Visual Studio
    Réponses: 4
    Dernier message: 26/09/2008, 14h03
  5. [DOM] Comment avoir ce format de date en xml "2008-01-15T15:23:00Z"
    Par pracede2005 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 27/02/2008, 09h17

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