Cenni preliminari sul controllo server Web XmlDataSource
Aggiornamento: novembre 2007
Il controllo XmlDataSource rende i dati XML disponibili ai controlli con associazione a dati. È possibile utilizzarlo per visualizzare dati con struttura gerarchia o tabulare. Il controllo XmlDataSource viene in genere utilizzato per visualizzare dati XML gerarchici negli scenari in sola lettura.
Vengono illustrati i seguenti argomenti:
Background
Esempi di codice
Riferimento alle classi
Background
Il controllo XmlDataSource carica i dati XML da un file XML specificato mediante la proprietà DataFile. È anche possibile caricare i dati XML da una stringa utilizzando la proprietà Data.
Il controllo XmlDataSource espone gli attributi degli elementi XML come campi associabili ai dati. Se si desidera eseguire l'associazione a valori che non sono attributi, è possibile specificare una trasformazione utilizzando un foglio di stile XSL (Extensible Sylesheet Language). Nei modelli dei controlli, come in un controllo FormView o GridView, è anche possibile associare un controllo di un modello ai dati XML utilizzando la funzione di associazione ai dati XPath. Per informazioni sull'utilizzo di un'espressione XPath, vedere Associazione di un controllo tabulare al controllo XmlDataSource.
Nell'esempio di codice riportato di seguito viene illustrato un controllo XmlDataSource con un controllo TreeView a esso associato. Il codice XML sorgente è riportato dopo l'esempio di codice.
<%@ 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>
Di seguito sono riportati i dati XML utilizzati nell'esempio di codice precedente.
<?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>
Trasformazione dei dati XML mediante il controllo XmlDataSource
Se si desidera trasformare i dati XML prima che vengano visualizzati da un controllo con associazione a dati, è possibile fornire un foglio di stile XSL (Extensible Sylesheet Language) per il controllo XmlDataSource. Analogamente ai dati XML, il foglio di stile viene generalmente caricato da un file specificato utilizzando la proprietà TransformFile. È anche possibile, tuttavia, caricarlo direttamente da una stringa utilizzando la proprietà Transform.
Per specificare argomenti del foglio di stile XSLT dinamico da utilizzare con il foglio di stile XSL durante la trasformazione, è possibile impostare la proprietà TransformArgumentList.
Nota: |
---|
Se si specifica un'espressione di filtro XPath utilizzando la proprietà XPath, il filtro verrà applicato in seguito alla trasformazione. |
Nell'esempio di codice riportato di seguito viene illustrato un controllo XmlDataSource con un controllo TreeView a esso associato. Nell'esempio vengono utilizzati i dati XML dell'esempio precedente. Il foglio di stile XSL utilizzato nell'esempio è riportato dopo l'esempio di codice.
<%@ 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>
Di seguito è riportato il foglio di stile XSL utilizzato nell'esempio di codice precedente.
<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>
Modifica dei dati XML mediante il controllo XmlDataSource
Il controllo XmlDataSource viene generalmente utilizzato in scenari costituiti da dati di sola lettura in cui i dati XML vengono visualizzati mediante un controllo con associazione a dati. È tuttavia possibile utilizzarlo anche per modificare i dati XML. Tenere presente che le operazioni automatiche di aggiornamento, inserimento ed eliminazione utilizzate con altri controlli di origine dati non funzioneranno. Per modificare i dati mediante il controllo XmlDataSource, è necessario scrivere codice personalizzato.
Per modificare i dati XML, chiamare il metodo GetXmlDocument per recuperare un oggetto XmlDocument, che costituisce una rappresentazione in memoria dei dati XML. È quindi possibile utilizzare il modello a oggetti esposto dall'oggetto XmlDocument e dai relativi oggetti XmlNode oppure utilizzare un'espressione XPath per modificare i dati nel documento. Dopo aver apportato modifiche alla rappresentazione in memoria dei dati XML, sarà possibile salvare i dati su disco chiamando il metodo Save. In questo modo si sovrascriverà completamente il file XML su disco.
Nell'elenco seguente sono riportate alcune restrizioni relative alla modifica dei dati XML mediante il controllo XmlDataSource:
I dati XML devono essere caricati da un file XML specificato mediante la proprietà DataFile e non da una stringa XML specificata nella proprietà Data.
Nella proprietà Transform o TransformFile non è possibile specificare una trasformazione XSLT.
Il metodo Save non gestisce le operazioni concorrenti di salvataggio provenienti da richieste differenti. Se più utenti modificano un file XML utilizzando il controllo XmlDataSource, non vi è alcuna garanzia che tutti gli utenti stiano lavorando sugli stessi dati e che un utente non sovrascriverà le modifiche apportate da un altro. È anche possibile che un'operazione Save non riesca perché un altro utente scrive nel file XML e dispone di blocco esclusivo su di esso.
Filtraggio dei dati XML mediante il controllo XmlDataSource
Per impostazione predefinita, il controllo XmlDataSource espone tutti i dati XML specificati dalla proprietà DataFile o Data. È tuttavia possibile filtrare i dati utilizzando un'espressione XPath. La proprietà XPath consente di specificare un'espressione di filtro XPath applicata dopo il caricamento dei dati XML e l'applicazione delle trasformazioni. Per un esempio, vedere Filtraggio dei dati mediante il controllo XmlDataSource.
Memorizzazione dei dati XML nella cache mediante il controllo XmlDataSource
Il controllo XmlDataSource viene generalmente utilizzato con un file XML e l'apertura e la lettura di un file XML a ogni richiesta di una pagina può influire sulle prestazioni dell'applicazione. Pertanto, la memorizzazione nella cache per il controllo XmlDataSource è attivata per impostazione predefinita. Tale funzionalità consente di ridurre il carico di elaborazione sul server a scapito della memoria sul server Web, producendo nella maggior parte dei casi un compromesso accettabile. Il controllo XmlDataSource memorizza i dati nella cache quando la proprietà EnableCaching è impostata sul valore predefinito true. La proprietà CacheDuration viene impostata sul numero di secondi necessari per memorizzare i dati nella cache mediante il controllo. È possibile utilizzare CacheExpirationPolicy per ottimizzare il comportamento di memorizzazione nella cache del controllo XmlDataSource.
Nota importante: |
---|
È consigliabile impostare la proprietà EnableCaching su false quando la rappresentazione del client è attivata e il file di origine del controllo XmlDataSource viene recuperato in base all'identità del client. Se la memorizzazione nella cache è attivata, i dati XML memorizzati nella cache per un singolo utente possono essere visualizzati da tutti gli utenti ed è possibile che le informazioni riservate vengano esposte a un'origine non desiderata. La rappresentazione del client viene attivata quando l'attributo impersonate dell'elemento di configurazione identity è impostato su true e l'identificazione anonima è disattivata per l'applicazione sul server Web. |
Torna all'inizio
Esempi di codice
Filtraggio dei dati mediante il controllo XmlDataSource
Associazione di un controllo tabulare al controllo XmlDataSource
Procedura dettagliata: creazione di una pagina Web per visualizzare dati XML
Torna all'inizio
Riferimento alle classi
Nella tabella riporta di seguito sono elencate le classi principali correlate al controllo XmlDataSource.
Membro |
Descrizione |
---|---|
Classe principale del controllo. |
Torna all'inizio