none
Lire les attributs d'un fichier xml en VB RRS feed

  • Question

  • Bonjour, je débute en VB et xml, et j'aimerai savoir comment on fait pour extraire une valeur selon un attribut, voici la forme de mon fichier xml :

    <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
    <fax xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    
      <properties>
        <property name="ANI">
          <value xsi:type="xsd:string">XXXX</value>
        </property>       
      <files>
        <file>
          <path>C:\XMediusFAX\Temp\457DD0EF-78B9-4712-89B8-92336C4D533F-500-IF.tiff</path>
        </file>
      </files>
    
    </fax>
    

    Voila, j'aimerai récupérer la valeur XXXX quand l'attribut name vaut ANI.

     

     

    Cordialement maxkun

     


    • Modifié maxkun mardi 27 septembre 2011 14:05
    mardi 27 septembre 2011 13:37

Réponses

  • Bonjour,

    Voici le code corrigé

    Dim q = (From [property] In XDocument.Load("XMLFile1.xml").Element("fax").Element("properties").Elements("property")
                     Where [property].Attribute("name") = "ANI"
                     Select [property].Element("value").Value).SingleOrDefault()
    

    Je l'ai testé depuis une application VB. NET afin que Xavier ne me fasse plus de réflexion désobligeante parceque je suis un débutant professionnel en VB .NET !!

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    • Marqué comme réponse maxkun mercredi 28 septembre 2011 09:15
    mercredi 28 septembre 2011 09:09
    Modérateur

Toutes les réponses

  • Bonjour,

    Le plus simple est d'utiliser Linq To XML :

    Dim q = (From property In XDocument.Load("MonFichier.xml").Element("fax").Element("properties").Elements("property")
                         Where property.Name == "ANI"
                         Select property.Element("value").Value).SingleOrDefault();
    

    "q" vaudra Nothing si "ANI" n'existe pas, il faudra la valeur "XXX..." dans le cas contraire

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    • Proposé comme réponse TroxsaEditor mardi 27 septembre 2011 14:42
    mardi 27 septembre 2011 14:13
    Modérateur
  • Bonjour Maxkun,

    Vous ne savez pas comment faire pour lire les attributions d'un fichier XML
    Il y a plusieurs façon de lire un fichier XML en fonction de votre version de Visual Studio, il me semble que dans les version après 2003 on peut utiliser LINQ (LINQ to XML ou encore XLINQ), avant cette version cela n'existait pas encore.

            Dim MonFichierXML = <?xml version="1.0" encoding="UTF-8" standalone="no"?>
                                <fax xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                                    <properties/>
                                    <property name="ANI"><value xsi:type="xsd:string">0233845654</value></property>
                                    <files>
                                        <file>
                                            <path>C:\XMediusFAX\Temp\457DD0EF-78B9-4712-89B8-92336C4D533F-500-IF.tiff</path>
                                        </file>
                                    </files>
                                </fax>
    
    
            For Each att In MonFichierXML...<property>.Attributes
                Console.WriteLine(att.Value)
            Next
    
            Console.WriteLine(MonFichierXML...<property>.Attributes()(0).Value)
    

    A bientôt


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    mardi 27 septembre 2011 14:16
    Auteur de réponse
  • Mot clé non valide en tant qu'identificateur. 

    Le compilateur me met cette erreur là pour From property dans la première ligne, j'ai essayé de le mettre entre " " mais ça empire la chose.

    mardi 27 septembre 2011 14:18
  • En fait je ne peux pas utiliser ta méthode Xavier, car les fichiers xml que je traiterai seront différents, du moins leur structure sera la même mais seule les valeurs changeront, je pense donc que la méthode de Gilles est meilleur, sinon je suis sous visual basic 2010.
    mardi 27 septembre 2011 14:25
  • Bonjour,

    Pouvez-vous nous donner le message d'erreur complet que vous donne le compilateur.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mardi 27 septembre 2011 14:33
    Modérateur
  • Et bien le message "Mot clé non valide en tant qu'identificateur. " apparait dans la fenêtre du compilateur avant même que je compile. Il n'y a pas d'autres message.

    http://www.hostingpics.net/viewer.php?id=429588erreurcompil.png

    mercredi 28 septembre 2011 06:29
  • Bonjour,

    Le mot Property est un mot clef il faut soit le changé soit le baliser

     

            Dim q = (From [property] In XDocument.Load("MonFichier.xml").Element("fax").Element("properties").Elements("property")
                                 Where [property].Name = "ANI"
                                 Select [property].Element("value").Value).SingleOrDefault()
    


    Gilles a du mal des fois entre le C# et le VB :)

     

     


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    mercredi 28 septembre 2011 08:05
    Auteur de réponse
  • Bonjour,

    Mince, j'ai été trahis ! Moi qui voulait montrer aux autre que je savais faire du VB .NET.... C'est encore raté !

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mercredi 28 septembre 2011 08:57
    Modérateur
  • C'est pas le seul qui ai du mal :s *sifflote*

    Sinon ton code compile nickel et j'ai rajouté ces 2 lignes pour voir la valeur q s'affichée :

     

            Console.WriteLine(q)
            Console.ReadLine()

     


    Or rien ne s'affiche, il devrait au moins affiché q quand il vaut ANI, non?

    Peut-être faut-il rajouter une tempo, ou un autre morceau de code.

     

    Edit : j'ai regardé en mode pas à pas et j'ai remarqué que q était égal a nothing a la fin de la requête, cela signifie donc qu'il n'as pas trouver d'attribut valant "ANI", étonnant car il y en a un pourtant.


    • Modifié maxkun mercredi 28 septembre 2011 09:08
    mercredi 28 septembre 2011 08:59
  • Bonjour,

    Voici le code corrigé

    Dim q = (From [property] In XDocument.Load("XMLFile1.xml").Element("fax").Element("properties").Elements("property")
                     Where [property].Attribute("name") = "ANI"
                     Select [property].Element("value").Value).SingleOrDefault()
    

    Je l'ai testé depuis une application VB. NET afin que Xavier ne me fasse plus de réflexion désobligeante parceque je suis un débutant professionnel en VB .NET !!

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    • Marqué comme réponse maxkun mercredi 28 septembre 2011 09:15
    mercredi 28 septembre 2011 09:09
    Modérateur
  • C'est nickel ça marche impect, merci beaucoup pour votre aide précieuse :)
    mercredi 28 septembre 2011 09:15
  • Bonjour,

    Voici le code corrigé

     

    Dim q = (From [property] In XDocument.Load("XMLFile1.xml").Element("fax").Element("properties").Elements("property")
                     Where [property].Attribute("name") = "ANI"
                     Select [property].Element("value").Value).SingleOrDefault()
    

    Je l'ai testé depuis une application VB. NET afin que Xavier ne me fasse plus de réflexion désobligeante parceque je suis un débutant professionnel en VB .NET !!

     

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5

    Le code que j'avais corrigé a une erreur ?

    Oups :) je fut désobligeant ? mais non !
    je trouve que vous êtes tres loin d'une personne qui débute en vb, comme toute personne quand on connais plusieurs langages de programmation on a tendance a ce mélanger les pinceaux.

    A bientôt


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    mercredi 28 septembre 2011 10:41
    Auteur de réponse
  • Bonjour, je cherche a obtenir des informations ciblées a partir d'un attribut d'un fichier xml , voici concretement ce que je cherche a obtenir, voici mon code xml:

    <?xml version="1.0" encoding="utf-8" ?>

    <catalogue>

      <room>

        <number name ="001">

          <type>A</type>

        </number>

      </room>

      <room>

        <number name ="002">

          <type>B</type>

        </number>

      </room>

      <room>

        <number name ="003">

          <type>C</type>

        </number>

      </room>

      <room>

        <number name ="004">

          <type>D</type>

        </number>

      </room>

    </catalogue>

     

    Comme maxhun, je cherche a obtenir le resultat "A" lorsque l'attribut name  équivaut à 001, "B" si 002 etc.

    Votre code fonctionne Gilles, mais malheureusement uniquement quand je passe en parametre:

    [property].Attribute("name") = "001"

    Si je mets 002 ou un autre, voici ce que me renvoie le navigateur  ( ah oui précision, je suis sur un webservice VB.net, d'ou le navigateur):

    <string xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.sitedejohn.com/"xsi:nil="true"/>

    Pouvez vous éclairer ma lanterne? Je ne comprends pas pourquoi cela fonctionne avec 001 et non avec les autres. Merci d'avance.

    mercredi 1 février 2012 22:49
  • Bonjour JackStrapp

    Pourriez vous ouvrir un nouveau thread (message) dans le forum pour ne pas confondre les deux problemes (le votre et celui de l'auteur)

    en vous remerciant d'avance.

     

     


    Cordialement,
    Xavier TALOUR
    Alias Troxsa SendMail
    Voir le profil de Xavier TALOUR sur LinkedIn
    jeudi 2 février 2012 12:47
    Auteur de réponse