Gestion grâce à un xml

Résolu
cs_lebuff Messages postés 39 Date d'inscription lundi 15 août 2011 Statut Membre Dernière intervention 17 juillet 2013 - 2 oct. 2011 à 11:22
 Utilisateur anonyme - 22 oct. 2011 à 15:54
Bonjour tout le monde, je développe actuellement un programme en VB.NET et j'ai besoin d'utiliser un fichier xml distant hébergé sur un serveur. Le fichier aurait à peu près cette structure:
<?xml version="1.0" encoding="UTF-8"?>
<files>
    
        <sha1>97d06d1f590d8ce7c3b4b1f786ac3ea2c9352d44</sha1>
    


    <file>
        <filename>calques_couleur.png</filename>
        <sha1>b7d23a540a7cda882dab7bf2f7c1207365e82ec1</sha1>
    </file>
    <file>
        <filename>calques_opacite.png</filename>
        <sha1>031775fbbb45c154f7c9911f3b482ecf5a9c280f</sha1>
    </file>
</files>


Ne m'y connaissant pas du tout dans la gestion XML en VB.NET j'aurai aimé avoir des conseils pour comment réaliser une lecture du fichier XML de cette structure et pouvoir exécuter des actions en fonction de celui-ci (exemple, si le filename n'existe pas dans le répertoire local envoyer un message d'erreur, ou si il existe mais que le hash est différent envoyer aussi un message d'erreur).

Cordialement.

16 réponses

Utilisateur anonyme
8 oct. 2011 à 21:00
Bonsoir,

L'écriture d'un xml avec ta méthode est très délicate.
Personnellement, j'utiliserais XmlTextWriter qui est bien plus simple à manipuler.

Cependant, pour créer un xml semblable à celui de ton 1er post ci-dessus, tu peux faire comme ceci :

        Dim XmlDoc As XmlDocument = New XmlDocument()
        Dim declaration As XmlDeclaration = XmlDoc.CreateXmlDeclaration("1.0", "UTF-8", Nothing)

        Dim files As XmlNode = XmlDoc.CreateNode("element", "files", "")

        Dim principal As XmlNode = XmlDoc.CreateNode("element", "principal", "")
        Dim node As XmlNode = XmlDoc.CreateNode("element", "sha1", "")
        node.InnerText = "10000"
        principal.AppendChild(node)

        files.AppendChild(principal)

        For x = 0 To 3
            Dim file As XmlNode = XmlDoc.CreateNode("element", "file", "")

            Dim node1 As XmlNode = files.AppendChild(file)

            Dim filename As XmlNode = XmlDoc.CreateNode("element", "filename", "")
            filename.InnerText = x.ToString

            Dim sha1 As XmlNode = XmlDoc.CreateNode("element", "sha1", "")
            sha1.InnerText = (x + 100).ToString

            node1.AppendChild(filename)
            node1.AppendChild(sha1)

            files.AppendChild(node1)
        Next

        XmlDoc.AppendChild(files)

        XmlDoc.InsertBefore(declaration, files)


        XmlDoc.Save("monfichier.xml")
        MsgBox("Enregistrement réussi")


Bonne soirée.
3
NHenry Messages postés 15090 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 6 novembre 2023 159
2 oct. 2011 à 14:32
Bonjour,

Tu peux t'intéresser à System.Xml ou Linq To XML.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cs_lebuff Messages postés 39 Date d'inscription lundi 15 août 2011 Statut Membre Dernière intervention 17 juillet 2013
7 oct. 2011 à 18:51
Merci de vos réponses, avec cette doc il y a largement moyen de se débrouiller :)

Néanmoins j'ai une question, je charge mon XML de cette façon:
XmlDoc.Load("http://www.monsite.fr/test.xml")

Mais cela prend environ 5 secondes alors que pour l'instant le fichier est tout petit, n'y a-t-il pas moyen d'optimiser ceci ?

Merci d'avance.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15090 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 6 novembre 2023 159
7 oct. 2011 à 19:37
Bonjour,

Est-ce que tu comptes le temps de téléchargent du fichier ?
Cer si le serveur mets un peu de temps pour répondre, ça reste logique.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cs_lebuff Messages postés 39 Date d'inscription lundi 15 août 2011 Statut Membre Dernière intervention 17 juillet 2013
7 oct. 2011 à 20:13
Oui les 5 secondes est composé en grande partie du temps de téléchargement du fichier je pense. Mais je trouve bizarre que via l'application le serveur a toujours un temps de réponse relativement long (fichier doit faire 5 ko à tout casser) alors que les téléchargements via un explorateur internet par exemple se lancent immédiatement. N'y a-t-il donc pas quelque chose à rajouter pour que le temps qui s'écoule entre la requête au serveur et l'envoie du fichier soit réduit au maximum ?
0
NHenry Messages postés 15090 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 6 novembre 2023 159
7 oct. 2011 à 20:39
Bonjour,

Je ne pourrais pas te répondre à cette question, cela dépasse mes compétences.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cs_lebuff Messages postés 39 Date d'inscription lundi 15 août 2011 Statut Membre Dernière intervention 17 juillet 2013
8 oct. 2011 à 15:58
Pour ce qui est de la lecture XML pas de problème j'ai trouvé mais bonheur mais par contre pour ce qui est de la création de XML j'ai quelques difficultés. J'ai essayé de prendre l'exemple qui est sur un des liens, ce qui donne ceci:
        Dim XmlDoc As XmlDocument = New XmlDocument()
        Dim elemSite As XmlElement
        elemSite = XmlDoc.CreateElement("SITE")

        'creation et definition de la balise url (enfant)
        Dim elemUrl As XmlElement
        elemUrl = XmlDoc.CreateElement("URL")
        elemUrl.InnerText = " http://www.peuw.net/index.xml "

        'creation et definition de la balise Nom (enfant)
        Dim elemNom As XmlElement
        elemNom = XmlDoc.CreateElement("NOM")
        elemNom.InnerText = "peuw.net"

        'ajout des 2 balise enfants a la balise parent 
        elemSite.AppendChild(elemUrl)
        elemSite.AppendChild(elemNom)

        'on ajoute la balise parent au document
        XmlDoc.DocumentElement.AppendChild(elemSite)

        'Ecriture du Xml
        XmlDoc.Save(Application.StartupPath & "Newsite.XML")
        MsgBox("Enregistrement réussi")

Bien qu'il n'y ait aucune erreur lorsque je lance le debug du programme, celui ci s'arrête à la ligne:
XmlDoc.DocumentElement.AppendChild(elemSite)

Et m'envoie cette erreur là:
Object reference not set to an instance of an object.

Je ne vois pas du tout d'où ça vient étant donné que elemSite a bien été déclaré en tant qu'élément XML. Si quelqu'un pourrait me renseigner sur d'où vient le problème où m'orienter vers une autre méthode fonctionnelle j'en serais heureux.

Cordialement.
0
NHenry Messages postés 15090 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 6 novembre 2023 159
8 oct. 2011 à 17:05
Bonjour,

L'erreur peut aussi venir de : XmlDoc.DocumentElement

Sinon, j'ai l'habitude d'utiliser un fichier XML en ressource pour avoir une base.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cs_lebuff Messages postés 39 Date d'inscription lundi 15 août 2011 Statut Membre Dernière intervention 17 juillet 2013
8 oct. 2011 à 18:51
Merci de vos réponses,
l'erreur vient en effet de
XmlDoc.DocumentElement

qui est dans la ligne :
XmlDoc.DocumentElement.AppendChild(elemSite)

Puisque AppendChild(variable) marche bien pour les balises URL et NOM qui sont enregistrées dans l'élément SITE (observé grâce à des tests), c'est l'écriture de la balise SITE qui contient les deux précédentes (URL et NOM) dans le fichier xml qui pose problème.
Quelqu'un sait-il ce que signifie cette erreur :
Object reference not set to an instance of an object.

Je ne vois pas d'où vient l'erreur, DocumentElement ne doit pas être déclaré pourtant je pense...

Cordialement.
0
NHenry Messages postés 15090 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 6 novembre 2023 159
8 oct. 2011 à 20:20
Bonjour,

A la place de :
XmlDoc.DocumentElement.AppendChild(elemSite)

Fais :
XmlDoc.AppendChild(elemSite)


---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cs_lebuff Messages postés 39 Date d'inscription lundi 15 août 2011 Statut Membre Dernière intervention 17 juillet 2013
9 oct. 2011 à 16:46
Petite question aussi qui n'a pas trop de rapport, savez vous comment lancer un .bin avec Process.Start ?
J'utilise Shell et cela marche bien mais c'est du VB6 et pas du VB.NET donc si quelqu'un savait comment lancer un fichier .bin avec Process.Start ça serait pas mal. Pour l'instant ça l'ouvre dans mon cas avec VLC (media player) qui ouvre par défault sur mon OS les fichiers .bin alors qu'avec la commande Shell il s'ouvre bien comme un exécutable.

Cordialement.
0
NHenry Messages postés 15090 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 6 novembre 2023 159
9 oct. 2011 à 22:04
Bonjour,

Un .Bin n'est pas un exécutable standard.
Il s'agit d'un fichier binaire, pas forcément exécutable.
Il s'ouvre comme on ouvrirait un fichier TXT, DOC ou MP3, avec une application externe.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cs_lebuff Messages postés 39 Date d'inscription lundi 15 août 2011 Statut Membre Dernière intervention 17 juillet 2013
21 oct. 2011 à 19:44
Bonsoir, je vais me contenter de la méthode Shell qui marche bien, sinon j'aurai aimé savoir si il y avait une fonction pour comparer deux XML (de structure semblable), j'ai entendu parler de xml diff sans vraiment trouver quelque chose. De mon côté j'ai essayé de bricoler quelque chose mais je ne suis pas encore satisfait du résultat.
Cordialement.
0
NHenry Messages postés 15090 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 6 novembre 2023 159
21 oct. 2011 à 19:47
Bonjour,

Je ne connais (et je n'ai jamais cherché) pas d'outils faisant cela, dsl.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
Utilisateur anonyme
22 oct. 2011 à 15:54
Bonsoir,

Si ces XML sont créés par ton application, la méthode que j'utiliserais consisterait à sérialiser (fabriquer un xml) ou dé-sérialiser (lire un xml) une classe contenant des données.
Il sera alors très facile de comparer les données stockées dans les différentes instances de la même classe après dé-sérialisation. (pour chaque instance : un xml distinct)

Bonne prog.
0
Rejoignez-nous