Enlazar un control tabular con el control XmlDataSource
Actualización: noviembre 2007
El control XmlDataSource se utiliza principalmente para exponer los datos XML jerárquicos a los controles enlazados como los controles TreeView o Menu. También puede enlazar los controles tabulares enlazados a datos como GridView o DataList al control XmlDataSource.
Enlace a campos en datos XML
Cuando se enlaza un control tabular enlazado a datos al control XmlDataSource, éste representa sólo el primer nivel de la jerarquía XML. El control XmlDataSource expone los atributos de los nodos de primer nivel como el equivalente de columnas en una tabla de datos. Como resultado, se puede especificar un nombre de atributo del nodo de primer nivel como el nombre de DataField para un objeto BoundField. También puede especificar un nombre de atributo en una expresión de enlace de datos Eval en una plantilla de control.
Enlace de datos a una jerarquía XML utilizando el método XPath
Los controles tabulares le permiten enlazar controles en una plantilla a los datos utilizando Eval o los métodos Bind. Si enlaza el control tabular a un control XmlDataSource, además puede utilizar el método XPath, que permite especificar una consulta de XPath para enlace de datos de sólo lectura.
El método de enlace de datos XPath explora la jerarquía XML y devuelve un valor de un nodo o un atributo en la jerarquía. Al utilizar el método de enlace de datos XPath, pasa una consulta XPath y un segundo parámetro opcional para especificar un formato para la cadena devuelta. El parámetro de formato de cadena utiliza la sintaxis definida para el método Format de la clase String.
En el ejemplo de código siguiente se muestra un control DataList enlazado a un control XmlDataSource. La expresión de enlace de datos en la plantilla utiliza el método XPath a los valores devueltos de los datos XML. Para obtener información detallada sobre el archivo People.xml utilizado para el ejemplo, vea Información general sobre el control de servidor web XmlDataSource.
<%@ 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"
XPath="/People/Person"
DataFile="~/App_Data/people.xml" />
<asp:DataList
id="PeopleDataList"
DataSourceID="PeopleDataSource"
Runat="server">
<ItemTemplate>
<table cellpadding="4" cellspacing="4">
<tr>
<td style="vertical-align:top; width:120">
<asp:Label id="LastNameLabel" Text='<%# XPath("Name/LastName")%>' />,
<asp:Label id="FirstNameLabel" Text='<%# XPath("Name/FirstName")%>' />
</td>
<td valign="top">
<asp:Label id="StreetLabel" Text='<%# XPath("Address/Street") %>' /><br />
<asp:Label id="CityLabel" Text='<%# XPath("Address/City") %>' />,
<asp:Label id="RegionLabel" Text='<%# XPath("Address/Region") %>' />
<asp:Label id="ZipCodeLabel" Text='<%# XPath("Address/ZipCode") %>' />
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
</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"
XPath="/People/Person"
DataFile="~/App_Data/people.xml" />
<asp:DataList
id="PeopleDataList"
DataSourceID="PeopleDataSource"
Runat="server">
<ItemTemplate>
<table cellpadding="4" cellspacing="4">
<tr>
<td style="vertical-align:top; width:120">
<asp:Label id="LastNameLabel" Text='<%# XPath("Name/LastName")%>' />,
<asp:Label id="FirstNameLabel" Text='<%# XPath("Name/FirstName")%>' />
</td>
<td valign="top">
<asp:Label id="StreetLabel" Text='<%# XPath("Address/Street") %>' /><br />
<asp:Label id="CityLabel" Text='<%# XPath("Address/City") %>' />,
<asp:Label id="RegionLabel" Text='<%# XPath("Address/Region") %>' />
<asp:Label id="ZipCodeLabel" Text='<%# XPath("Address/ZipCode") %>' />
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
</form>
</body>
</html>
Uso de XPathSelect para devolver los nodos seleccionados
Puede enlazar un control de datos tabular anidado en una plantilla de elemento a una lista de nodos seleccionados desde los datos proporcionados por un control XmlDataSource. Para ello, puede utilizar el método XPathSelect. El método XPathSelect devuelve una lista de nodos que coincide con una expresión XPath con la que el control de datos tabular puede trabajar como si fuera una colección de registros de datos. El siguiente ejemplo muestra cómo utilizar el método XPathSelect con un control DataList anidado para mostrar los nodos Order_Details desde la jerarquía XML.
<asp:XmlDataSource
id="OrdersDataSource"
DataFile="~\App_Data\orders.xml" />
<asp:DataList
id="OrdersDataList"
DataSourceID="OrdersDataSource"
Runat="server">
<ItemTemplate>
Order ID: <asp:Label id="OrderIDLabel"
Text='<%# XPath("OrderID") %> /><BR>
<asp:DataList id="ProductsDataList"
DataSource='<%# XPathSelect("Order_Details") %>' >
<ItemTemplate>
<br>Product ID:<%# XPath("ProductID")%>
<br>Quantity: <%# XPath("Quantity") %>
</ItemTemplate>
</asp:DataList>
</ItemTemplate>
</asp:DataList>