Partage
  • Partager sur Facebook
  • Partager sur Twitter

Gestion grâce à un xml

    2 octobre 2011 à 11:17:49

    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>
        <principal>
            <sha1>97d06d1f590d8ce7c3b4b1f786ac3ea2c9352d44</sha1>
        </principal>
        <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.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      2 octobre 2011 à 13:21:10

      Regarde du côté de l'espace de nom "System.Xml" ;)

      http://msdn.microsoft.com/fr-fr/library/y3y47afh.aspx

      Je pense que la classe System.Xml.XmlReader fait ce que tu cherches.

      http://msdn.microsoft.com/fr-fr/librar [...] S.100%29.aspx

      Une fois que tu as extrait les données du fichier XML, c'est à toi de comparer les hashs sha-1 des fichiers et d'afficher un message en cas de différence ;)

      Pour ça tu as la classe System.Security.Cryptography.SHA1 :

      http://msdn.microsoft.com/fr-fr/librar [...] phy.sha1.aspx

      Ces classes sont un peu délicates à utiliser, n'hésite pas à chercher plus d'infos sur google.
      • Partager sur Facebook
      • Partager sur Twitter
        2 octobre 2011 à 20:00:13

        Merci de votre réponse, j'ai trouvé ceci qui a l'air pas mal pour la gestion des XML:
        http://selkis.developpez.com/tutoriels/dotnet/Xmlpart2/

        Je ne suis pas sûr d'avoir saisi mais est-ce que ceci vous semble correct :

        Dim XmlListe As XmlDocument = New XmlDocument()
        XmlListe.Load(Application.StartupPath & "liste.XML")
        Dim nom As XmlNodeList
        nom = XmlDoc.DocumentElement.GetElementsByTagName("file")
        Dim nœud, noeudEnf As XmlNode
        For Each noeud In nom
              For Each noeudEnf In noeud.ChildNodes
                    If noeudEnf.LocalName = "filenam" Then
                          nomfichier = noeudEnf.InnerText
                    Else
                          If (noeudEnf.LocalName = "sha1") Then
                              hash = noeudEnf.InnerText
                          End If
                    End If
                 Msgbox(nomfichier & " "  & hash)
               Next 
        Next
        
        • Partager sur Facebook
        • Partager sur Twitter
          7 octobre 2011 à 18:53:16

          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.
          • Partager sur Facebook
          • Partager sur Twitter
            8 octobre 2011 à 18:57:37

            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 site, 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à:

            Citation

            Object reference not set to an instance of an object.


            L'erreur vient de la partie de la ligne :
            XmlDoc.DocumentElement
            

            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 ? Je ne vois pas d'où elle vient, DocumentElement ne doit pas être déclaré pourtant je pense...

            Cordialement.
            • Partager sur Facebook
            • Partager sur Twitter

            Gestion grâce à un xml

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown