Share via


Visão Geral sobre o Controle de Servidor Web XmlDataSource

O controle XmlDataSource disponibiliza XML dados para os controles ligados a dados.Você pode usá-lo para exibir os dados hierárquicos e tabulares.O controle XmlDataSource normalmente é usado para exibir dados hierárquicos XML em cenários somente de leitura.

Esse tópico contém:

  • Segundo plano

  • Exemplos de código

  • Referência de Classe

Segundo plano

O XmlDataSource carrega dados XML de um arquivo XML especificado usando a propriedade DataFile.Os dados XML também podem ser carregados de uma sequência de caracteres usando a propriedade Data.

O controle XmlDataSource expõe os atributos de elementos XML como campos de dados acopláveis.Se você deseja vincular a valores que não são atributos, você pode especificar uma transformação usando uma folha de estilos Extensible Sylesheet Language (XSL).Nos modelos de controle, como em um FormView ou controles GridView, você pode também acoplar um controle em um modelo para dados XML usando a função XPath de acoplamento de dados.Para obter informações sobre como usar uma expressão XPath, consulte Vinculando um Controle Tabular ao Controle XmlDataSource.

O exemplo de código a seguir mostra um controle XmlDataSource acoplado a um controle TreeView.A fonte XML é exibida após o exemplo de código.

<%@ 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>

A seguir são mostrados os dados XML usados pelo exemplo de código anterior.

<?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>

Transformando dados XML usando o controle XmlDataSource

Se você desejar transformar os dados XML antes que ele seja exibido por um controle de dados ligados, você pode fornecer um folha de estilos Extensible Sylesheet Language (XSL) para o controle XmlDataSource.Como com dados XML, você normalmente carrega a folha de estilos de um arquivo que você especifica usando a propriedade TransformFile.No entanto, você também pode carregar a folha de estilos diretamente de uma sequência de caracteres usando a propriedade Transform.

Para fornecer argumentos dinâmicos da folha de estilos XSLT a ser usado pela folha de estilos XSL durante a transformação, você pode definir a propriedade TransformArgumentList.

Observação:

Se você especificar uma expressão de filtragem XPath usando a propriedade XPath, o filtro é aplicado depois que a transformação consegue local.

O exemplo de código a seguir mostra um controle XmlDataSource acoplado a um controle TreeView.O exemplo usa os dados XML do exemplo anterior.A folha de estilos XSL usada pelo exemplo é mostrada após o exemplo de código.

<%@ 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>

A seguir é mostrada a folha de estilos XSL usada pelo exemplo de código anterior.

<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>

Editando dados XML usando o controle XmlDataSource

O controle XmlDataSource é comumente usado em cenários de dados somente de leitura onde um controle de dados vinculados exibe dados XML.No entanto, você também pode usar o XmlDataSource para editar dados XML.Observe que as operações automáticas de atualização, inserção, e exclusão que funcionam com outros controles de fonte de dados não funcionarão.Você deve escrever código personalizado para modificar os dados usando o controle XmlDataSource.

Para editar os dados XML, chame o método GetXmlDocument para recuperar um objeto XmlDocument, que é uma representação em memória dos dados XML.Em seguida, você pode usar o modelo de objeto exposto pelo objeto XmlDocument e seus objetos XmlNode, ou você pode usar uma expressão XPath para manipular os dados no documento.Quando você faz alterações na representação em memória dos dados XML, você pode salvar os dados para o disco chamando o método Save.Isso substitui o arquivo XML no disco em sua totalidade.

A lista a seguir indica algumas restrições sobre edição de dados XML usando o controle XmlDataSource:

  • Os dados XML devem ser carregados a partir de um arquivo XML especificado com a propriedade DataFile e não de uma sequência de caracteres de XML especificado na propriedade Data.

  • Nenhuma transformação XSLT pode ser especificada nas propriedades Transform ou TransformFile.

  • O método Save não manipula operações simultâneas de salvar por diferentes solicitações.Se mais de um usuário está editando um arquivo XML usando o controle XmlDataSource, não há garantia de que todos os usuários estejam trabalhando com os mesmos dados e não há garantia de que um usuário não substituirá as alterações de outro usuário.Também é possível que uma operação Save falhe devido a outro usuário estar gravando o arquivo XML e ter um bloqueio exclusivo no arquivo.

Filtragem de dados XML usando o controle XmlDataSource

Por padrão, o controle XmlDataSource expõe todos os dados XML especificados pelas propriedades DataFile ou Data.No entanto, você pode filtrar os dados usando uma expressão XPath.A propriedade XPath permite a você especificar uma expressão que é aplicada depois que os dados XML são carregados e tiveram as transformações aplicadas a eles.Para um exemplo, consulte Filtrando dados usando o controle XmlDataSource.

Fazendo cache de dados XML usando o controle XmlDataSource

O controle XmlDataSource é normalmente usado com um arquivo XML, e abrir e ler um arquivo XML toda vez que uma página solicitada pode afetar o desempenho do seu aplicativo.Portanto, o cache é habilitado para o controle XmlDataSource por padrão.A cache permite a você reduzir a carga de processamento em seu servidor à custa de memória de servidor Web; na maioria dos casos este é um equilíbrio aceitável.O controle XmlDataSource realiza cache de dados quando a propriedade EnableCaching é definida como true, o que é o padrão . Você define a propriedade CacheDuration como o número de segundos que o controle deve armazenar em cache de dados.Você pode usar o CacheExpirationPolicy para ajustar o comportamento do armazenamento em cache do controle XmlDataSource.

Observação importante:

É recomendável que você defina a propriedade EnableCaching para false quando a representação de cliente é ativada e o arquivo de origem para o controle XmlDataSource é recuperado com base na identidade do cliente.Se o cache estiver ativado, o cache de dados XML para um único usuário pode ser exibido a todos os usuários e informações confidenciais poderiam ser expostas a uma fonte indesejada.A representação do cliente é ativada quando o atributo impersonate do elemento de configuração identidade é definido como true e a identificação anônima está desativada para o aplicativo no servidor Web.

Voltar ao topo

Exemplos de código

Filtrando dados usando o controle XmlDataSource

Vinculando um Controle Tabular ao Controle XmlDataSource

Demonstra Passo a passo: Criando um página da Web para exibir dados XML

Voltar ao topo

Referência de Classe

A tabela seguinte lista as classes chave que estão relacionados ao controle XmlDataSource.

Membro

Descrição

XmlDataSource

A classe principal para o controle.

Voltar ao topo

Consulte também

Referência

Visão geral controle servidor Web XML