Bonjour à tous,
je suis actuellement en cours de développement d'une application d'envoi de SMS.
Il me reste un dernier point à terminer concernant la journalisation des envois.
Lorsqu'un utilisateur envoi un SMS, un fichier XML est complété avec les envois du sms (numéro de tel, contenu du sms, date d'envoi, type d'envoi (si planifié ou si envoi immédiat) et l'utilisateur qui a envoyé le SMS.
voici comment je génère le fichier:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| XmlDocument doc = new XmlDocument();
doc.Load("CHEMIN DU FICHIER XML");
XmlElement details = doc.CreateElement("Details");
XmlAttribute utilisateur = doc.CreateAttribute("Utilisateur");
XmlAttribute numtel = doc.CreateAttribute("NumTel");
XmlAttribute SMScontent = doc.CreateAttribute("SmsContent");
XmlAttribute date = doc.CreateAttribute("Date");
XmlAttribute sendtype = doc.CreateAttribute("SendType");
utilisateur.Value = Page.User.Identity.Name;
numtel.Value = TextBox2.Text;
SMScontent.Value = TextArea3.Value;
sendtype.Value = "Planifié";
date.Value = Calendar1.SelectedDate.AddHours(int.Parse(DropDownList3.Text)).AddMinutes(int.Parse(DropDownList4.Text)).ToString();
details.Attributes.Append(utilisateur);
details.Attributes.Append(numtel);
details.Attributes.Append(SMScontent);
details.Attributes.Append(date);
details.Attributes.Append(sendtype);
doc.DocumentElement.AppendChild(details);
doc.Save("CHEMIN DU FICHIER XML"); |
Le fichier xml se génère correctement et ressemble à ceci:
1 2 3 4 5
| <?xml version="1.0" encoding="utf-8"?>
<Envois>
<Details Utilisateur="user1" NumTel="06XXXXXXX" SmsContent="Modèle 3" Date="12/04/2019 09:19:29" SendType="Immédiat" />
<Details Utilisateur="user2" NumTel="06XXXXXXX" SmsContent="Personnalisé" Date="12/04/2019 09:20:00" SendType="Planifié" />
</Envois> |
J'ai créé une page sur l'application qui permet d'afficher ce fichier XML via un gridview et une xmlDataSource qui va récupérer le contenu du fichier xml et l'affiche dans un tableau.
Je souhaiterais donc pouvoir filtrer l'affichage de ce fichier en affichant uniquement les lignes concernant un user en particulier.
Pour se faire, je pensais utiliser la valeur de:
Quelqu'un pourrait me filer un petit coup de main car je ne comprend pas le fonctionnement des requêtes vers les fichiers XML, j'ai essayé de faire ceci mais ça ne fonctionne pas et je ne comprend pas pourquoi :
1 2 3 4 5 6 7 8 9
| string filePath = "CHeMIN FICHIER XML";
DataSet ds = new DataSet();
ds.ReadXml(filePath);
var utilisateurs= ds.Tables[0].AsEnumerable();
var query = from utilisateur in utilisateurs
where utilisateur.Field<string>("Utilisateur") == Page.User.Identity.Name
select utilisateur;
GridView1.DataSource = query.ToList();
GridView1.DataBind(); |
Merci d'avance pour votre aide
EDIT:
J'ai trouvé un moyen en dur de faire ce que je souhaite en utilisant une expression XPATH au niveau du XmlDataSource:
XPath="Envois/Details[@Utilisateur='user1']">
ceci me renvoit bien uniquement les enregistrements avec Utilisateur = User1 mais j'aimerais le rendre dynamique en fonction de l'utilisateur qui est connecté à l'application (authentification Windows) pour cela j'ai essayé d'intégrer une variable à la déclaration de l'expression XPATH au niveau du xmldatasource mais ça ne marche pas...
XPath="Envois/Details[@Utilisateur='<%Page.User.Identity.Name%>']">
Je pense que je ne suis pas loin.. si jamais quelqu'un connait un moyen d'éxecuter du C# dans de l'asp... je suis preneur... j'ai essayé pas mal de combinaisons différentes rien ne prend...
Merci d'avance !
Partager