XmlDatasource et requetes XPath - XPathSelect
Question :
Je suis peut être idiot mais je n'arrive pas à voir comment je peux filtrer via XPath un XMLDataSource afin de remplir une datalist avec le text des Tags name.
Pourriez-vous me donner une piste ?
Réponse :
Les requêtes XPath interviennent à deux endroits lorsqu'on utilise un XMLDataSource. On peut les utiliser soit pour filtrer notre XMLDataSource afin de n'afficher que les enregistrements souhaités, ou alors on peut les utiliser pour sélectionner le texte à afficher.
Voici un exemple simple d'utilisation de requête XPath via un XMLDataSource.
<asp:XmlDataSource runat="server" ID="xmlDSCities" XPath="cities/city[starts-with(postalCode,69)]">
<Data>
<cities>
<city>
<name>Lancie</name>
<postalCode>69220</postalCode>
</city>
<city>
<name>Villie morgon</name>
<postalCode>69910</postalCode>
</city>
<city>
<name>Macon</name>
<postalCode>71000</postalCode>
</city>
</cities>
</Data>
</asp:XmlDataSource>
<asp:Repeater runat="server" DataSourceID="xmlDSCities">
<ItemTemplate>
<%# XPath("name") %>
</ItemTemplate>
<SeparatorTemplate>-</SeparatorTemplate>
</asp:Repeater>
Cet exemple affichera seulement les communes dont le code postal commence par 69. On notera que pour simplifier l'exemple, j'ai mis le contenu XML directement dans le contrôle XMLDatasource; on peut bien sur spécifier un nom de fichier ou une URL via sa propriété DataFile.
Allons plus loin :
On peut aller encore plus loin en utilisant la méthode XPathSelect. Cette méthode permet de binder facilement des repeaters imbriqués.
<asp:XmlDataSource runat="server" ID="xmlDSCities" XPath="cities/city[starts-with(postalCode,69)]">
<Data>
<cities>
<city>
<name>Lancie</name>
<postalCode>69220</postalCode>
<persons>
<person>
<firstName>Cyril</firstName>
</person>
<person>
<firstName>Pouet</firstName>
</person>
</persons>
</city>
<city>
<name>Villie morgon</name>
<postalCode>69910</postalCode>
</city>
<city>
<name>Macon</name>
<postalCode>71000</postalCode>
</city>
</cities>
</Data>
</asp:XmlDataSource>
<asp:Repeater runat="server" DataSourceID="xmlDSCities">
<ItemTemplate>
<%# XPath("name") %>
<br />
<asp:Repeater runat="server" DataSource='<%#XPathSelect("persons/person") %>'>
<ItemTemplate>
<%# XPath("firstName") %>
</ItemTemplate>
<SeparatorTemplate>-</SeparatorTemplate>
</asp:Repeater>
</ItemTemplate>
<SeparatorTemplate><hr /></SeparatorTemplate>
</asp:Repeater>
Les méthodes XPath et XPathSelect sont définit au niveau de la classe XPathBinder [MSDN]