Selectsinglenode avec conditions [Résolu]

Messages postés
99
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
27 mai 2009
- - Dernière réponse : cs_tortuedu74
Messages postés
99
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
27 mai 2009
- 20 mai 2009 à 17:25
Bonjour a tous,

Voila mon souci, jusqu'à maintenant, pour trouver un nœud précis dans mon xml, je parcourais toute la table, mais je commence a avoir beaucoup de donner et je voudrais qu'au lieu de tout parcourir, je ne sélectionne que le noeud qui correspond à mes paramètres, j'ai tenté ça:

'déclarations
            nodes = xmlDoc.SelectNodes("/EC_TABLE")

            Dim nod As XmlElement
            nod = xmlDoc.SelectSingleNode("/TABLE[@TA='" & contact & "']")

et mon XML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<EC_TABLE>
  <TABLE TA="1" TI="titi" TO="" TU="" />
...

je voudrais selectionner que le noeud ou le ta est egal à mon contact, soit 1 par exemple.
ou est le problème?

Merci d'avance.
Afficher la suite 

18 réponses

Meilleure réponse
Messages postés
17283
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56
3
Merci
la racine.

nodes, ici ne te sert pas.

quant à nod, tu le fais partir de xmldoc. Il te faut donc inclure EC_TABLE dans la requete:

Dim nod As XmlElement
nod = xmlDoc.SelectSingleNode("EC_TABLE/TABLE[@TA='" & contact & "']")

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Renfield
Messages postés
17283
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56
3
Merci
la syntaxe avec les [] est propre aux requetes XPath.
une fois le noeud retrouvé, faut jouer avec ce que propose ton objet nod.

je lance Visual Studio
je presse F2
je cherche 'XmlElement'
je parcoures ce qui m'est proposé... Attributes
je vois que XmlAttributeCollection me propose GetNamedItem

nod.Attributes.GetNamedItem("TA").Value = contact

devrait donc mieux convenir.


pratique, l'explorateur d'objets ^^

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Renfield
Messages postés
17283
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56
3
Merci
possible, peut etre mettre une case a cocher "Je confirme la suppression ... irreversible ..."

et zou, l'utilisateur ayant coché cette case... le clic sur le bouton delete n'est pas accidentel.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Renfield
Messages postés
99
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
27 mai 2009
0
Merci
OK, je te remercie beaucoup.

Et quand j'ai séléctionner mon noeud, je voudrais modifier un de ses attributs.
Est-ce que je peux faire quelque chose comme:
nod.attributes[tata = contact]  ?
parce que ça ne marche pas....

Merci
Commenter la réponse de cs_tortuedu74
Messages postés
99
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
27 mai 2009
0
Merci
ah oui d'accord,

J'ai tenté ça aussi et ça marche plutôt bien, qu'en pense-tu?

For index = 0 To GridView1.Rows.Count - 1
            ICheckbox = CType(GridView1.Rows(index).Cells(0).Controls(1),System.Web.UI.WebControls.CheckBox)
            If ICheckbox.Checked = True Then
                nod = xmlDoc.SelectSingleNode("/EC_TABLE/TABLE[@TA_NUME='" & GridView1.Rows(index).Cells(3).Text & "']")
                nod.ParentNode.RemoveChild(nod)
            End If
        Next

Et juste une dernière question.

Je voudrais qu'avant de supprimer, j'ai un message de confirmation, j'ai donc écris du coté du code vb:

            Dim reponse As Integer
            reponse = MsgBox("voulez-vous supprimer l'index n°" & contact & "? ", MsgBoxStyle.YesNo, MessageBoxDefaultButton.Button2)

Bien sur, une fois le code posé sur le serveur, ma messagebox ne fonctionne pas, voici le message d'erreur:

L'affichage d'une boîte de dialogue modale ou d'un formulaire lorsque
l'application ne s'exécute pas en mode UserInteractive n'est pas une opération
valide. Spécifiez le style ServiceNotification ou DefaultDesktopOnly pour
afficher une notification à partir d'une application de service.

Quelle solution je peux avoir pour mettre une boite de dialogue sans que ça pose problème?
Commenter la réponse de cs_tortuedu74
Messages postés
99
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
27 mai 2009
0
Merci
ah, excuse, pour la première partie de ma réponse, j'ai répondu un peu a côté, lol.

Je vais tenté ce que tu m'a dis, merci.

En tout cas, si tu as une solution pour ma message box?

Merci
Commenter la réponse de cs_tortuedu74
Messages postés
17283
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56
0
Merci
pas mal, mais testes bien que nod a bien été trouvé.

If ICheckBox.Checked True Then
True inutile ici, Checked renvoyant deja un Boolean...

MsgBox => c'est du VB6, utilises Messagebox.Show
(qui ne renvoie pas un Integer, gaffe)



concernant ton message, fait ce qu'il te dit ^^ change le parametre réclamé.
Commenter la réponse de Renfield
Messages postés
99
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
27 mai 2009
0
Merci
Quand tu dis:
"concernant ton message, fait ce qu'il te dit ^^ change le parametre réclamé."

je veux bien mais je ne comprend pas quels paramètres je dois changer...
Commenter la réponse de cs_tortuedu74
Messages postés
17283
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56
0
Merci
je lance visual studio
je presse F2
je cherche, par exemple: DefaultDesktopOnly

je trouve System.Windows.Forms.MessageBoxOptions

ca a donc un rapport direct avec les MessageBox
en fouinant encore un peu, je trouve:

Public Const DefaultDesktopOnly As System.Windows.Forms.MessageBoxOptions = 131072
Membre de : System.Windows.Forms.MessageBoxOptions
Résumé :
La zone de message est affichée sur Active Desktop.



a tester, donc:

If Messagebox.Show("Voulez-vous vraiment...","Suppression de ....", MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button2,MessageBoxOptions.DefaultDesktopOnly,False) = DialogResult.Yes Then
........
End If
Commenter la réponse de Renfield
Messages postés
99
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
27 mai 2009
0
Merci
ok mais y'a rien qui s'affiche avec ta solution. 
Commenter la réponse de cs_tortuedu74
Messages postés
17283
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56
0
Merci
le message d'erreur non plus :p

euh... ca doit le loguer ce message, vachement utile... (j'avais un doute, lisant la description)

c'est quel genre d'appli que tu as qui refuse l'affichage d'un msgBox ?

"System.Web.UI.WebControls"

un lien avec le fait que ton appli joues avec des choses Web.... (t'es pas en WinForm ?)
Commenter la réponse de Renfield
Messages postés
99
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
27 mai 2009
0
Merci
non, c'est pas winform.

Je te montre ma fonction:

Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
        Dim index As Integer = Convert.ToInt32(e.CommandArgument)
        'MsgBox("supprimer : " & index)

        Dim selectedRow As GridViewRow = GridView1.Rows(index)
        Dim contactCell As TableCell = selectedRow.Cells(3)
        Dim contact As String = contactCell.Text

        If e.CommandName = "supprimer" Then
            Response.Write("You selected " & contact & ".
")
            xmlDoc.Load(fichier)

            'déclarations
            'nodes = xmlDoc.SelectNodes("/EC_TABLE")

            Dim nod As XmlElement
            nod = xmlDoc.SelectSingleNode("/EC_TABLE/TABLE[@TA_NUME='" & contact & "']")

            'recherche de l'élément
            'MsgBox(nod.Attributes.ItemOf(0).Value)

            Dim reponse As Integer
            reponse = MessageBox.Show("voulez-vous supprimer l'index n°" & contact & "? ", " Confirmation ", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly)
            If reponse = MsgBoxResult.Yes Then
                nod.ParentNode.RemoveChild(nod)
            End If

            xmlDoc.Save(fichier)
            Response.Redirect("http://Intranet2:8282/accueil.aspx")
        End If
        If e.CommandName = "modifier" Then
            xmlDoc.Load(fichier)
            Dim nod As XmlElement
            nod = xmlDoc.SelectSingleNode("/EC_TABLE/TABLE[@TA_NUME='" & contact & "']")

            'recherche de l'élément
            'MsgBox(nod.Attributes.ItemOf(0).Value)

        End If
    End Sub

Et en effet, y'a rien qui s'affiche, même pas un message d'erreur....
Commenter la réponse de cs_tortuedu74
Messages postés
17283
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56
0
Merci
Dim reponse As Integer
faire plutot
Dim reponse As MsgBoxResult
tout simplement.


en tapant:
webform msgbox

dans google, on lit partout qu'on ne peux pas. que les msgbox sont dans des Winforms, point barre.

te faut jouer autrement
Commenter la réponse de Renfield
Messages postés
99
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
27 mai 2009
0
Merci
Un exemple?
Commenter la réponse de cs_tortuedu74
Messages postés
99
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
27 mai 2009
0
Merci
Oui tu as raison, je vais faire tout ça avec des checkbox, c'est aussi joli et c'est pratique.

Je n'y avais pas pensé.

En tout cas je te remercie pour ton aide qui m'a vraiment été utile.
Commenter la réponse de cs_tortuedu74
Messages postés
99
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
27 mai 2009
0
Merci
Ben en fait j'ai vraiment besoin d'une message box ou de qqchose qui y ressemble...
T'as pas une autre solution?
Commenter la réponse de cs_tortuedu74
Messages postés
17283
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56
0
Merci
afficher un truc web... avec un lien de confirmation...
(te permettra de faire un truc joli)

ou jouer avec un message de confirmation javascript...


regarde ce que propose google, plein de gens cherchent des MsgBox en WebForm...
Commenter la réponse de Renfield
Messages postés
99
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
27 mai 2009
0
Merci
ok merci.
Je te souhaite un bon week end.

A +
Commenter la réponse de cs_tortuedu74