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

ASP.NET Discussion :

[VB.NET] Ecriture d'un fichier XML


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 166
    Par défaut [VB.NET] Ecriture d'un fichier XML
    Jaimerai ecrir un fichier xml:
    ce fichier doit etre creer si il n'existe pas, et on y met les données.

    si il existe deja on a joute a la suite du fichier les données

    Voila ma fonction:
    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
     
    Function save2XML(idScore as Double, isAuth as String)
    	Dim isFileName		as String = isAuth & ".xml"
    	Dim isDate			as String = Now()
    	Dim ioDs			as New DataSet()
    	Dim ioDateColumns	as New DataColumn()
    	Dim ioScoreColumns	as New DataColumn()
    	Dim ioScoreRow		as DataRow ' on n'instancie pas encore
    	Dim ioFileStream 	as New System.IO.FileStream(Server.MapPath(isFileName), System.IO.FileMode.Create)
    	Dim ioXmlWriter As New System.Xml.XmlTextWriter(ioFileStream, System.Text.Encoding.Utf8)
     
    	Try
    		ioDs.ReadXml(Server.MapPath(isFileName))
    		ioScoreRow = ioDs.Tables("session").NewRow()
    		ioScoreRow("Date") = isDate
    		ioScoreRow("Score") = idScore
    		ioDs.Tables("session").Rows.Add(ioScoreRow)
    		ioDs.WriteXml(ioXmlWriter)
        	ioXmlWriter.Close()
    	Catch
    		ioDs.Tables.Add("session")
    		ioDateColumns.DataType = System.Type.GetType("System.String")
    		ioScoreColumns.DataType = System.Type.GetType("System.Double")
    		ioDateColumns.ColumnName = "Date"
    		ioScoreColumns.ColumnName = "Score"
    		ioDs.Tables("session").Columns.Add(ioDateColumns)
    		ioDs.Tables("session").Columns.Add(ioScoreColumns)
    		ioScoreRow = ioDs.Tables("session").NewRow()
    		ioScoreRow("Date") = isDate
    		ioScoreRow("Score") = idScore
    		ioDs.Tables("session").Rows.Add(ioScoreRow)
     
    		ioDs.WriteXml(ioXmlWriter)
        	ioXmlWriter.Close()
     
    	End try
     
    End Function
    Avec ce code jarrive a creer le fichier et a y ecrir, mais j'efface a chauqe foit son contenu. Il faudrais que j'arrive a ecrir a la suite.

    Merci

  2. #2
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim ioFileStream    as New System.IO.FileStream(Server.MapPath(isFileName), System.IO.FileMode.Append)
    tout simplement

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 166
    Par défaut
    bon ca marche a peu pres donc merci

    par contre il se pose un autre probleme:

    voici la structure de 1 seul enregistrement:
    <NewDataSet>
    <session>
    <Date>28/04/2004 09:37:57</Date>
    <Score>10</Score>
    </session>
    <NewDataSet>
    Le probleme qd j'ecri a la suite, c'est qu'il me remet les balise <NewDataSet> ce qui provoque une erreur si je li le fichier ds IE

    Une solution?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 166
    Par défaut
    De plus j'aimerai que la date soit un attribut de session, mais la je ne vois pas du tout comment le specifier.

  5. #5
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    effectivement par definition: un document xml ne peut avoir qu'un seul element root. Donc tu peux rajouter un <log> au tout debut et </log> a la fin par exemple. Sinon il faut generer le fichier xml "a la main"

    Malheureusement le dataset est tres rigide quant a la forme du fichier qu'il genere. Si tu souhaites le personnaliser, il faut generer le fichier xml "a la main" en bouclant sur tous les enregistrements et tous les champs

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 166
    Par défaut
    Citation Envoyé par Piotrek
    Si tu souhaites le personnaliser, il faut generer le fichier xml "a la main" en bouclant sur tous les enregistrements et tous les champs
    ce qui veut dire?


    et sinon creer mon fichier de cette facon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    XmlTextWriter writer = new XmlTextWriter(Server.MapPath("userInfo.xml"), Encoding.UTF8);
     
      writer.WriteStartDocument();
      writer.WriteStartElement("userInfo");
     
      writer.WriteStartElement("browserInfo");
      writer.WriteAttributeString("timeVisited", DateTime.Now.ToString());
      writer.WriteElementString("userAgent", Request.UserAgent);
     
      writer.WriteEndElement();
      writer.WriteEndDocument();
      writer.Close();
    et ensuite ajouter ajouter mes enregistrement?


    Pouir ce qui est de la balise root ds le fichier xml; je sais qu'il ne peut y en avoir que une, mais comment faire pour pouvoir neanmoins ecrir mes enregistrement a la suite?[/quote]

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 166
    Par défaut
    jai modifier ma fonction:
    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
    Function save2XML(idScore as Double, isAuth as String)
    	Dim isFileName		as String = isAuth & ".xml"
    	Dim isDate			as String = Now()
    	Dim ioDs			as New DataSet("root")
    	Dim ioDateColumns	as New DataColumn()
    	Dim ioScoreColumns	as New DataColumn()
    	Dim ioScoreRow		as DataRow ' on n'instancie pas encore
    	Dim ioFileStream 	as New System.IO.FileStream(Server.MapPath(isFileName), System.IO.FileMode.Append)
    	Dim ioXmlWriter As New System.Xml.XmlTextWriter(ioFileStream, System.Text.Encoding.Utf8)
     
    	Try
    		ioDs.ReadXml(Server.MapPath(isFileName))
    		ioScoreRow = ioDs.Tables("session").NewRow()
    		ioScoreRow("Date") = isDate
    		ioScoreRow("Score") = idScore
    		ioDs.Tables("session").Rows.Add(ioScoreRow)
    		ioDs.WriteXml(ioXmlWriter)
        	ioXmlWriter.Close()
    	Catch
    		ioXmlWriter.WriteStartDocument()
    		ioXmlWriter.WriteStartElement("root")
    			ioXmlWriter.WriteStartElement("session")
    				ioXmlWriter.WriteAttributeString("date", isDate)
    				ioXmlWriter.WriteElementString("score", idScore)
    			ioXmlWriter.WriteEndElement()
    		ioXmlWriter.WriteEndElement()
    		ioXmlWriter.WriteEndDocument()
      		ioXmlWriter.Close()
    	End try
     
    End Function
    Ce code me permet si le fichier n'existe pas de le creer (avec la structure que je veux). Malheureusement le bloc try (qui doit sexecuter si le fichier existe) me rajoute les balises root a chaque enregistrement ce qui provoque une erreur ds le fichier xml lors de la lecture de celui ci.

    Une idée pour ajouter just lenregistrement?[/code]

  8. #8
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Et bien l'idee ca serait d'utiliser ce writter pour creer les element, les attributs et les donnees a ajouter

    mais je comprends le probleme: ajouter des elements dans un fichier xml deja forme

    - solution 1 tu ouvres ton fichier xml dans un xmldocument et tu fais un appendchild
    probleme: si ton doc xml est gros, ca sera pas tres efficace de le chager completement a chaque fois pour y ajouter un element

    - solution 2 tu ajoutes les donnees au fichier xml a la suite sans te soucier que ce fichier xml soit bien forme (en ne fermant pas l'element root a la fin).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ioFileStream    as New System.IO.FileStream(Server.MapPath(isFileName), System.IO.FileMode.Create)
       Dim ioXmlWriter As New System.Xml.XmlTextWriter(ioFileStream, System.Text.Encoding.Utf8)
    convient pour ajouter les elements a la suite
    Juste avant l'affichage dans le navigateur tu ajoutes la fermeture du fichier xml
    probleme: faut avoir le moyen d'intercepter l'affichage dans ie pour rajouter la fermeture du fichier xml

    je pense qu'il doit exister des solutions intermediaires a mediter

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 166
    Par défaut
    et si je li mon fichier xml dans un dataset et a partir de ce dataset je fais une boucle qui me permetrai de réécrir tout dans le fichier.

    Ca serai possible ca?


    edit: le fichier xml ne devrai atteindre que tres rarement plus de 20 enregistrement (20 enregistrement de 1 attribut et un ellement quoi)

  10. #10
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    bin en fait je comprends pas pourquoi tu utilise le dataset dans cette situation. Dataset c'est typiquement pour des bases de donnees, xmlreader ou xmldocument c'est beaucoup plus adapte

    Comme t'as peu de donnees tu peux utiliser xmldocument pour creer, lire ajouter des elements comme tu veux

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 166
    Par défaut
    jutilise un dataset pour lire mes fichier xml

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 166
    Par défaut
    si tu me di ke xmldocument cest mieu approprié je veux bien, mais dans mon cas comment je vais l'utiliser?

  13. #13
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    bin j'ai pas d'exemple concret sous la main mais tout est dans la doc:

    le chapitre:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemxmlxmldocumentclasstopic.asp

    ouverture/creation d'un doc xml:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemxmlxmldocumentclassctortopic.asp

    tout le reste:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemxmlxmldocumentmemberstopic.asp

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2004
    Messages : 166
    Par défaut
    Merci

    voila la fonction qui fonctionne (nan je fais pas de repetition )
    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
    Function save2XML(idScore as Double, isAuth as String)
    	Dim isFileName		as String = isAuth & ".xml"
    	Dim isDate			as String = Format(Now, "yyyy/MM/dd") & " " & Format(Now, "HH:mm")
    	Dim ioDs			as New DataSet()
     
    	Try 'si le fichier xml existe alors on ajoute l'enregistrement sinon la bloc catch est executé
    		ioDs.ReadXml(Server.MapPath(isFileName)) ' si l'execption est lever alors on execute le bloc catch
    		Dim ioXmlDoc as XmlDocument = new XmlDocument() 'on crée un nouveau document xml
    		ioXmlDoc.Load(Server.MapPath(isFileName)) 'on le charge avec le document précédent
    		Dim ioRootElement as XmlNode = ioXmlDoc.DocumentElement 'on recupere le noeud racine
    		Dim ioSesElement as XmlElement = ioXmlDoc.CreateElement("session") 'on crée l'élément session
    		Dim ioDateAttr as XmlAttribute = ioXmlDoc.CreateAttribute("date") ' avec son attribut date
    		ioDateAttr.innerText = isDate 'on assigne la date a l'attribut
    		ioSesElement.SetAttributeNode(ioDateAttr) 'et on l'ajoute a l'attribut session
    		Dim ioScoreElement as XmlElement = ioXmlDoc.CreateElement("score") ' on crée l'élément score
    		ioScoreElement.innerText = idScore ' on lui donne la valeur souhaité
    		ioSesElement.AppendChild(ioScoreElement) ' on insere le sous élément
    		ioRootElement.AppendChild(ioSesElement) 'on insere le sous élément session dans l'élément racine
    		ioXmlDoc.Save(Server.MapPath(isFileName)) ' et on sauvegarde le fichier
     
    	Catch
    		Dim writer as XmlTextWriter = New XmlTextWriter(Server.MapPath(isFileName), Encoding.UTF8)
    		writer.WriteStartDocument() 
     		writer.WriteStartElement("root") ' on ajoute l'élément racine
    			writer.WriteStartElement("session") ' on y ajoute l'element session
     				writer.WriteAttributeString("date", isDate) ' avec la date comme attribut
     				writer.WriteElementString("score", idScore) ' et le score comme element
     			writer.WriteEndElement() 'on ferme l'élément session
     		writer.WriteEndElement() ' puis l'élément racine
    		writer.WriteEndDocument() ' et enfin on crée le fichier
    		writer.Close() ' et on referme le textwriter
    	End Try
     
    End Function
    Merci pour el coup de pouce

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

Discussions similaires

  1. Ecriture sur un fichier XML en VB.net
    Par sarah38 dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/07/2007, 13h35
  2. <xml><asp.net> Ecrire dans un fichier xml
    Par kenkine dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 24/03/2006, 11h17
  3. [C#]Lecture et Ecriture d'un fichier .xml
    Par debug dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/01/2006, 12h41
  4. [C#] Probleme d'écriture dans un fichier XML
    Par Joad dans le forum ASP.NET
    Réponses: 5
    Dernier message: 02/05/2005, 16h19
  5. [DOM] Ecriture d'un fichier XML en java
    Par fidififouille dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 12/05/2004, 09h32

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