Partager via


Vue d'ensemble du contrôle serveur Web XmlDataSource

Mise à jour : novembre 2007

Le contrôle XmlDataSource permet aux contrôles liés aux données d'utiliser les données XML. Vous pouvez l'utiliser pour afficher les données sous forme hiérarchique ou de tableau. Le contrôle XmlDataSource est utilisé en général pour afficher les données XML hiérarchiques dans les scénarios en lecture seule.

Cette rubrique contient les sections suivantes :

  • Contexte

  • Exemples de code

  • Référence de classe

Contexte

Le contrôle XmlDataSource charge les données XML à partir d'un fichier XML spécifié à l'aide de la propriété DataFile. Les données XML peuvent également être chargées à partir d'une chaîne à l'aide de la propriété Data.

Le contrôle XmlDataSource expose les attributs des éléments XML en tant que champs pouvant être liés à des données. Si vous souhaitez créer une liaison à des valeurs autres que des attributs, vous pouvez spécifier une transformation à l'aide d'une feuille de style XSL (Extensible Stylesheet Language). Dans les modèles de contrôle, et notamment les contrôles FormView ou GridView, vous pouvez également lier un contrôle d'un modèle à des données XML à l'aide de la fonction de liaison de données XPath. Pour plus d'informations sur l'utilisation d'une expression XPath, consultez Liaison d'un contrôle sous forme de tableau au contrôle XmlDataSource.

L'exemple de code suivant illustre un contrôle XmlDataSource lié à un contrôle TreeView. Le code XML source est indiqué après l'exemple de code.

<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head >
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" >
      <asp:XmlDataSource
        id="PeopleDataSource"
        
        DataFile="~/App_Data/people.xml" />

      <asp:TreeView
        id="PeopleTreeView"
        
        DataSourceID="PeopleDataSource">
        <DataBindings>
          <asp:TreeNodeBinding DataMember="LastName"    TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="FirstName"   TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="Street"      TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="City"        TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="Region"      TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="ZipCode"     TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="Title"       TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="Description" TextField="#InnerText" />
        </DataBindings>
      </asp:TreeView>

    </form>
  </body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head >
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" >
      <asp:XmlDataSource
        id="PeopleDataSource"
        
        DataFile="~/App_Data/people.xml" />

      <asp:TreeView
        id="PeopleTreeView"
        
        DataSourceID="PeopleDataSource">
        <DataBindings>
          <asp:TreeNodeBinding DataMember="LastName"    TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="FirstName"   TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="Street"      TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="City"        TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="Region"      TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="ZipCode"     TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="Title"       TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="Description" TextField="#InnerText" />
        </DataBindings>
      </asp:TreeView>

    </form>
  </body>
</html>

Les éléments suivants montrent les données XML utilisées par l'exemple de code précédent.

<?xml version="1.0" encoding="utf-8" ?>
<People>
  <Person>
    <Name>
      <FirstName>Manoj</FirstName>
      <LastName>Syamala</LastName>
    </Name>
    <Address>
      <Street>345 Maple St.</Street>
      <City>Redmond</City>
      <Region>WA</Region>
      <ZipCode>01434</ZipCode>
    </Address>
    <Job>
      <Title>CEO</Title>
      <Description>Develops company strategies.</Description>
    </Job>
  </Person>

  <Person>
    <Name>
      <FirstName>Jared</FirstName>
      <LastName>Stivers</LastName>
    </Name>
    <Address>
      <Street>123 Elm St.</Street>
      <City>Seattle</City>
      <Region>WA</Region>
      <ZipCode>11223</ZipCode>
    </Address>
    <Job>
      <Title>Attorney</Title>
      <Description>Reviews legal issues.</Description>
    </Job>
  </Person>

  <Person>
    <Name>
      <FirstName>Karina</FirstName>
      <LastName>Agerby</LastName>
    </Name>
    <Address>
      <Street>34 Palm Avenue</Street>
      <City>Renton</City>
      <Region>WA</Region>
      <ZipCode>63910</ZipCode>
    </Address>
    <Job>
      <Title>IT Director</Title>
      <Description>In charge of corporate network.</Description>
    </Job>
  </Person>
</People>

Transformation de données XML à l'aide du contrôle XmlDataSource

Si vous souhaitez transformer les données XML avant qu'elles soient affichées par un contrôle lié aux données, vous pouvez fournir une feuille de style XSL au contrôle XmlDataSource. Comme c'est le cas avec les données XML, la feuille de style est généralement chargée à partir d'un fichier que vous spécifiez à l'aide de la propriété TransformFile. Toutefois, vous pouvez également charger directement la feuille de style à partir d'une chaîne à l'aide de la propriété Transform.

Pour fournir les arguments de la feuille de style XSLT dynamiques que la feuille de style XSL doit utiliser pendant la transformation, vous pouvez définir la propriété TransformArgumentList.

Remarque :

Si vous spécifiez une expression de filtre XPath à l'aide de la propriété XPath, le filtre est appliqué après la transformation.

L'exemple de code suivant illustre un contrôle XmlDataSource lié à un contrôle TreeView. L'exemple utilise les données XML de l'exemple précédent. La feuille de style XSL utilisée par l'exemple est indiquée après l'exemple de code.

<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head >
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" >
      <asp:XmlDataSource
        id="PeopleDataSource"
        
        TransformFile="~/App_Data/names.xsl"
        DataFile="~/App_Data/people.xml" />

      <asp:TreeView
        id="PeopleTreeView"
        
        DataSourceID="PeopleDataSource">
        <DataBindings>
          <asp:TreeNodeBinding DataMember="Name"   TextField="#InnerText" />
        </DataBindings>
      </asp:TreeView>

    </form>
  </body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head >
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" >
      <asp:XmlDataSource
        id="PeopleDataSource"
        
        TransformFile="~/App_Data/names.xsl"
        DataFile="~/App_Data/people.xml" />

      <asp:TreeView
        id="PeopleTreeView"
        
        DataSourceID="PeopleDataSource">
        <DataBindings>
          <asp:TreeNodeBinding DataMember="Name"   TextField="#InnerText" />
        </DataBindings>
      </asp:TreeView>

    </form>
  </body>
</html>

Les éléments suivants montrent la feuille de style XSL utilisée par l'exemple de code précédent.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="People">
  <Names>
    <xsl:apply-templates select="Person"/>
  </Names>
</xsl:template>

<xsl:template match="Person">
  <xsl:apply-templates select="Name"/>
</xsl:template>

<xsl:template match="Name">
  <name><xsl:value-of select="LastName"/>, <xsl:value-of select="FirstName"/></name>
</xsl:template>

</xsl:stylesheet>

Modification de données XML à l'aide du contrôle XmlDataSource

Le contrôle XmlDataSource est souvent utilisé dans les scénarios de données en lecture seule où un contrôle lié aux données affiche les données XML. Toutefois, vous pouvez également utiliser le contrôle XmlDataSource pour modifier les données XML. Notez que les opérations de mise à jour, d'insertion et de suppression automatiques réalisables avec d'autres contrôles de source de données ne fonctionnent pas dans ce cas-ci. Vous devez écrire du code personnalisé pour modifier des données à l'aide du contrôle XmlDataSource.

Pour modifier les données XML, appelez la méthode GetXmlDocument pour récupérer un objet XmlDocument, lequel constitue une représentation en mémoire des données XML. Vous pouvez ensuite utiliser le modèle d'objet exposé par l'objet XmlDocument et ses objets XmlNode ou utiliser une expression XPath pour manipuler les données contenues dans le document. Lorsque vous avez apporté des modifications à la représentation en mémoire des données XML, vous pouvez enregistrer les données sur disque en appelant la méthode Save. Le fichier XML sur le disque est alors remplacé dans son intégralité.

La liste suivante répertorie les restrictions concernant la modification des données XML à l'aide du contrôle XmlDataSource :

  • Les données XML doivent être chargées à partir d'un fichier XML spécifié avec la propriété DataFile et non à partir d'une chaîne de code XML spécifiée dans la propriété Data.

  • Aucune transformation XSLT ne peut être spécifiée dans les propriétés Transform ou TransformFile.

  • La méthode Save ne gère pas plusieurs opérations d'enregistrement simultanées émanant de demandes différentes. Si plusieurs utilisateurs modifient un fichier XML à l'aide du contrôle XmlDataSource, rien ne garantit que tous les utilisateurs manipulent les mêmes données ni que les modifications d'un utilisateur ne seront pas remplacées par celles d'un autre. Il est également possible qu'une opération Save échoue lorsqu'un autre utilisateur écrit dans le fichier XML et possède un verrou exclusif sur le fichier.

Filtrage de données XML à l'aide du contrôle XmlDataSource

Par défaut, le contrôle XmlDataSource expose toutes les données XML spécifiées par les propriétés DataFile ou Data. Vous pouvez toutefois filtrer les données à l'aide d'une expression XPath. La propriété XPath vous permet de spécifier une expression de filtre XPath qui sera appliquée après le chargement des données XML et leur éventuelle transformation. Pour obtenir un exemple, consultez Filtrage de données à l'aide du contrôle XmlDataSource.

Mise en cache de données XML à l'aide du contrôle XmlDataSource

Dans la mesure où le contrôle XmlDataSource est généralement utilisé avec un fichier XML, l'ouverture et la lecture d'un fichier XML à chaque demande de page peuvent affecter les performances de votre application. Par conséquent, la mise en cache est activée par défaut pour le contrôle XmlDataSource. Elle permet de réduire la charge de traitement imposée à votre serveur au détriment de la mémoire du serveur Web, ce qui représente dans la plupart des cas un compromis acceptable. Le contrôle XmlDataSource met en cache des données lorsque la propriété EnableCaching a la valeur true, ce qui représente l'option par défaut . Vous affectez à la propriété CacheDuration le nombre de secondes pendant lesquelles le contrôle doit conserver les données en cache. Vous pouvez utiliser la propriété CacheExpirationPolicy pour affiner le comportement de mise en cache du contrôle XmlDataSource.

Remarque importante :

Il est recommandé d'affecter à la propriété EnableCaching la valeur false lorsque l'emprunt d'identité client est activé et que le fichier source du contrôle XmlDataSource est récupéré sur la base de l'identité du client. Si la mise en cache est activée, les données XML en cache relatives à un seul utilisateur peuvent être consultées par tous les utilisateurs et des informations sensibles pourraient être exposées à une source non désirée. L'emprunt d'identité client est activé lorsque l'attribut impersonate de l'élément de configuration identity a la valeur true et que l'identification anonyme est désactivée pour l'application sur le serveur Web.

Retour au début

Exemples de code

Filtrage de données à l'aide du contrôle XmlDataSource

Liaison d'un contrôle sous forme de tableau au contrôle XmlDataSource

Procédure pas à pas : création d'une page Web pour afficher des données XML

Retour au début

Référence de classe

Le tableau suivant répertorie les classes clés relatives au contrôle XmlDataSource.

Membre

Description

XmlDataSource

Classe principale du contrôle.

Retour au début

Voir aussi

Référence

Vue d'ensemble du contrôle serveur Web XML