Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : recherche dans un fichier xml en vb.net [ Base de données / XML ] (diego29)

mardi 11 juillet 2006 à 08:15:21 | recherche dans un fichier xml en vb.net

diego29

Membre Club
je souhaite faire une fonction qui fait une recherche dans un fichier xml d'un ou deux objets suivant un critère.
le problème est le suivant : la fonction trouve un certain nombre de noeuds dans le fichier xml (ceux du début en fait) mais pas tous.

voici mon code:


Sub Rechercher_Composants()

        Dim DocXml As New XmlDocument()
        Dim Noeud1, Noeud2 As XmlNode
        Dim Noeuds1, Noeuds2 As XmlNodeList
        Dim sCritere1, sCritere2 As String
        Dim s1, s2 As String
        Dim v2 As Char() = {"+"}

        DocXml.Load("composants.xml")
        s1 = CBO_1_3.Text
        s2 = CBO_2_3.Text
       
        sCritere1 = "//objet[caract='" & CBO_1_2.SelectedItem & " " & s1.TrimStart(v2) & " euros" & "']"
        sCritere2 = "//objet[caract='" & CBO_2_2.SelectedItem & " " & s2.TrimStart(v2) & " euros" & "']"
       
        Noeud1 = DocXml.SelectSingleNode(sCritere1)
        Noeuds1 = Noeud1.ChildNodes

        For Each Noeud1 In Noeuds1
            Select Case Noeud1.Name
                Case "nom"
                    TXT_RES_1.Text = Noeud1.InnerText & " :" & vbCrLf
                Case "necessaire"
                    TXT_RES_1.Text = TXT_RES_1.Text & Noeud1.InnerText
            End Select
        Next

        If CBO_2_3.SelectedItem <> String.Empty Then

            Noeud2 = DocXml.SelectSingleNode(sCritere2)
            Noeuds2 = Noeud2.ChildNodes

            For Each Noeud2 In Noeuds2
                Select Case Noeud2.Name
                    Case "nom"
                        TXT_RES_2.Text = Noeud2.InnerText & " :" & vbCrLf
                    Case "necessaire"
                        TXT_RES_2.Text = TXT_RES_2.Text & Noeud2.InnerText
                End Select
            Next
        End If

End Sub

peut être y a t il des fonctions XML en .NET qui permettent de résoudre le problème autrement je manque de doc sur le sujet.
merci si vous avez une idée.

mercredi 23 août 2006 à 11:01:02 | Re : recherche dans un fichier xml en vb.net

saizonou

Salut,

Sans voir ton fichier xml c'est un peu difficile mais ta recherche Xpath se fait avec un SelectSingleNode "SelectSingleNode(sCritere1) " donc tu ne récupères que le premier noeud trouvé correspondant à ce critère.
Pour avoir une liste de tous les noeuds correspondants (nodelist) tu dois utiliser un
SelectNode



SAIZONOU Landry


jeudi 24 août 2006 à 10:56:26 | Re : recherche dans un fichier xml en vb.net

diego29

Membre Club

mon fichier xml a la sctructure suivante :

<liste>
   <objet>   
      <nom></nom>
      <prix></prix>
      <caract></caract>
      <necessaire>
         <compo0></comp0>
         <compo1></comp1>
         <compo2></comp2>
      </necessaire>
   </objet>
   <objet>
    ---------
   </objet>
</liste>

La recherche fonctionne en fait sur les 100 premiers objets à partir du 101 ème j'ai une erreur de type "System.NullReferenceException"

 

 


jeudi 24 août 2006 à 17:10:42 | Re : recherche dans un fichier xml en vb.net

diego29

Membre Club
c'est bien
<compo0></compo0>
<compo1></compo1>
<compo2></compo2>

petite erreur de frappe dans le msg au dessus

vendredi 25 août 2006 à 10:56:44 | Re : recherche dans un fichier xml en vb.net

saizonou

Salut
Ton erreur "System.NullReferenceException" vient du fait qu'une de tes recherches (
Noeud1 = DocXml.SelectSingleNode(sCritere1))ne trouve aucun node correspondant, tu te retrouves avec un Noeud1 nul.
Comme tu veux utiliser ce node après il te renvoi une erreur.
Pour éviter cette erreur tu dois effectuer le traitement sur ce node que s'il n'est pas nul :

Noeud1 = DocXml.SelectSingleNode(sCritere1)

IfNot Noeud1 IsNothingThen
   Noeuds1 = Noeud1.ChildNodes
   ForEach Noeud1 In Noeuds1
      SelectCase Noeud1.Name
         Case"nom"
            TXT_RES_1.Text = Noeud1.InnerText & " :" & vbCrLf
         Case"necessaire"
            TXT_RES_1.Text = TXT_RES_1.Text & Noeud1.InnerText
      EndSelect
   Next
EndIf

Je te rappel aussi que l'utilisation de SelectSingleNode ne retourne que le premier node correspondant à ta recherche, s'il y en a d'autres tu ne les auras pas dans ta réponse.

SAIZONOU Landry
[ Lien ]

lundi 28 août 2006 à 12:27:27 | Re : recherche dans un fichier xml en vb.net

diego29

Membre Club

merci pour ces explications, en effet  SelectSingleNode ne retourne qu'un seul noeud mais comme il ne peut y avoir qu'un seul objet correspondant au critère dans ma liste je n'en aurai donc qu'un  mais effectivement pour etre plus rigoureux je devrai remplacer le // par / dans ma requete Xpath.

quant au test "ifnot" le compilateur me répond que le test n'est pas possible sur un objet de type XmlNodelist.

j'ai vérifié ma requete Xpath avec un outil Xpathvisualizer et tous les objets que j'ai pu rechercher ont été trouvés. dont pas de soucis du coté de la structure de mon fichier Xml.

j'ai essayé également avec un fichier XML avec une liste plus courte là bizarrement plus d'erreur !!

étant donné que je travaille avec une version Express de VB j'ai lu qu'il y avait une limitation quant au fonctionnalités Xml par rapport aux versions standard et pro le problème pourrait-il venir de là ?

 

 

 

 


lundi 28 août 2006 à 13:48:05 | Re : recherche dans un fichier xml en vb.net

saizonou

Houps !
Petite erreur de frappe, c'est Is not et pas ifnot qui n'existe pas.
Quant à une limitation des fonctionnalités XML je ne sais pas ce qu'il en est, par contre l'erreur que tu annonces est bien une référence à un objet null.


SAIZONOU Landry



Cette discussion est classé dans : text, case, xml, noeud1, noeud2


Répondre à ce message

Sujets en rapport avec ce message

Winsock qui reçoit seulement 1 octet ??? [ par doggy ] Salut !Bon ben voilà, je sais pas trop ce qu'il se passe, mais mon contrôle winsock ne veut pas recevoir plus d'1 octet ...Apres quelques tests, j'ai comment reconnaitre une variable avec un bloc if [ par p33M ] Salut je suis un debutant et jai créé un programme de chat avec winsock et voici le sub pour reconnaitre les donnés ki arrive de lautre utilisateurPri lire du xml [ par snarkpit29 ] Bonjours je n'arrive plus a lire un fichier xml auparavant j'utilisé ce code la la version du xml était mais maintenant la version a changé vb m Pb de test [ par DragonBurn ] Je n'arrive pas à déterminer pourquoi mon test ne se réalise pasj'ai conçu un prog qui utilise des fonctions d'excel pour déterminer des résultats de Help pour trouver un bug [ par CeNedra83 ] je dispose d'une ihm avec beaucoup de text box, et je dois empecher dans certaines que des lettres y soient rentrées. je ne evux autoriser que des nom [vb.net] Traducteur [ par Nexto ] Bonsoir,Je voudrais modifier la source deWhiteDwarf (traducteur qui prend les infos di translate de Google) qui est en vb6 et je voudrais le migrer ve réception sur port com + buffer [ par comablack ] Bonjours,j'ai un petit boitier, qui, lorsque j'ouvre la porte du lab envoye un signal a 1 sur le port com. J'ai développer un petit soft qui coupe aut Toujour un truc qui gene !! [ par aposfa ] bonsoir en fait je réalise un sudoku tout fonctionne tres bien sauf deux trucs bien génant !! 1er probleme : j'ai créer une fonction pour enregistre XML et caract spéciaux (saut de ligne, < ou >, accents ) [ par globule ] Bonjour, J'écris des données XML dans une variable comme ceci     ChaineXML = ""    ChaineXML = ChaineXML + ""        ChaineXML = ChaineXML + "<V probleme de défnition [ par sechanbask ] Bonjour, Je cherche à faire un convertisseur de valeur, suivant une fonction non connue, en bref, je rentre la valeur d'un débit et ça me donne le


Nos sponsors

Sondage...

CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.