Übersicht über das XmlDataSource-Webserversteuerelement

Aktualisiert: November 2007

Das XmlDataSource-Steuerelement macht XML-Daten für datengebundene Steuerelemente verfügbar. Mithilfe des Steuerelements können hierarchische Daten und Tabellendaten angezeigt werden. Mit dem XmlDataSource-Steuerelement werden i. d. R. hierarchische XML-Daten in schreibgeschützten Szenarios angezeigt.

Dieses Thema enthält folgende Abschnitte:

  • Hintergrund

  • Codebeispiele

  • Klassenreferenz

Hintergrund

Das XmlDataSource-Steuerelement lädt XML-Daten aus einer mit der DataFile-Eigenschaft angegebenen XML-Datei. XML-Daten können auch mit der Data-Eigenschaft aus einer Zeichenfolge geladen werden.

Das XmlDataSource-Steuerelement macht Attribute von XML-Elementen als datenbindungsfähige Felder verfügbar. Wenn Sie Bindungen an Werte herstellen möchten, die keine Attribute sind, können Sie mit einem XSL-Stylesheet (Extensible Stylesheet Language) eine Transformation angeben. In Steuerelementvorlagen, z. B. in einem FormView-Steuerelement oder einem GridView-Steuerelement, können Sie ein Steuerelement in einer Vorlage auch mit der XPath-Datenbindungsfunktion an XML-Daten binden. Informationen über das Verwenden von XPath-Ausdrücken finden Sie unter Binden eines tabellarischen Steuerelements an das XmlDataSource-Steuerelement.

Das folgende Codebeispiel zeigt ein XmlDataSource-Steuerelement und ein daran gebundenes TreeView-Steuerelement. Der XML-Quellcode wird nach dem Codebeispiel angezeigt.

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

Im Folgenden werden die vom vorigen Codebeispiel verwendeten XML-Daten angezeigt.

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

Transformieren von XML-Daten mit dem XmlDataSource-Steuerelement

Wenn Sie die XML-Daten transformieren möchten, bevor sie von dem datengebundenen Steuerelement angezeigt werden, können Sie ein XSL-Stylesheet (Extensible Stylesheet Language) für das XmlDataSource-Steuerelement bereitstellen. Das Stylesheet wird in der Regel – wie auch XML-Daten – aus einer Datei geladen, die Sie mit der TransformFile-Eigenschaft angeben. Aber Sie können das Stylesheet auch mit der Transform-Eigenschaft direkt aus einer Zeichenfolge laden.

Um dynamische XSLT-Stylesheetargumente bereitzustellen, die während der Transformation vom XSL-Stylesheet verwendet werden, können Sie die TransformArgumentList-Eigenschaft festlegen.

Hinweis:

Wenn Sie einen XPath-Filterausdruck mit der XPath-Eigenschaft angeben, wird der Filter nach der Transformation angewendet.

Das folgende Codebeispiel zeigt ein XmlDataSource-Steuerelement und ein daran gebundenes TreeView-Steuerelement. Im Beispiel werden die XML-Daten aus dem vorigen Beispiel verwendet. Das vom Beispiel verwendete XSL-Stylesheet wird nach dem Codebeispiel angezeigt.

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

Im Folgenden wird das vom vorigen Codebeispiel verwendete XSL-Stylesheet angezeigt.

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

Bearbeiten von XML-Daten mit dem XmlDataSource-Steuerelement

Das XmlDataSource-Steuerelement wird im Allgemeinen in Szenarios mit schreibgeschützten Daten verwendet, in denen ein datengebundenes Steuerelement XML-Daten anzeigt. Aber Sie können das XmlDataSource-Steuerelement auch verwenden, um XML-Daten zu bearbeiten. Beachten Sie, dass anders als bei anderen Datenquellensteuerelementen keine automatischen Aktualisierungs-, Einfüge- und Löschvorgänge möglich sind. Sie müssen benutzerdefinierten Code schreiben, um Daten mit dem XmlDataSource-Steuerelement zu ändern.

Rufen Sie zum Bearbeiten der XML-Daten die GetXmlDocument-Methode auf, um ein XmlDocument-Objekt abzurufen, das eine speicherinterne Darstellung der XML-Daten ist. Sie können die Daten in dem Dokument dann mit dem vom XmlDocument-Objekt verfügbar gemachten Objektmodell und dessen XmlNode-Objekt oder mit einem XPath-Ausdruck bearbeiten. Nachdem Sie Änderungen an der speicherinternen Darstellung der XML-Daten vorgenommen haben, können Sie die Daten auf dem Datenträger speichern, indem Sie die Save-Methode aufrufen. Dadurch wird die XML-Datei auf dem Datenträger komplett überschrieben.

Die folgende Liste führt einige Beschränkungen bei der Bearbeitung von XML-Daten mit dem XmlDataSource-Steuerelement auf:

  • Die XML-Daten müssen aus einer mit der DataFile-Eigenschaft angegeben XML-Datei geladen werden und nicht aus einer in der Data-Eigenschaft angegebenen XML-Zeichenfolge.

  • In der Transform-Eigenschaft und der TransformFile-Eigenschaft kann keine XSLT-Transformation angegeben werden.

  • Die Save-Methode behandelt keine gleichzeitigen Speichervorgänge von verschiedenen Anforderungen. Wenn mehrere Benutzer eine XML-Datei gleichzeitig mit dem XmlDataSource-Steuerelement bearbeiten, gibt es keine Garantie, dass alle Benutzer dieselben Daten verwenden, und auch keine Garantie, dass ein Benutzer nicht die Änderungen eines anderen überschreibt. Es ist auch möglich, dass ein Save-Vorgang fehlschlägt, weil ein anderer Benutzer in die XML-Datei schreibt und eine exklusive Sperre für die Datei besitzt.

Filterung von XML-Daten mit dem XmlDataSource-Steuerelement

Standardmäßig macht das XmlDataSource-Steuerelement alle XML-Daten verfügbar, die von der DataFile-Eigenschaft oder der Data-Eigenschaft angegeben werden. Sie können die Daten jedoch mit einem XPath-Ausdruck filtern. Mit der XPath-Eigenschaft können Sie einen XPath-Filterausdruck angeben, der angewendet wird, nachdem die XML-Daten geladen wurden und ggf. Transformationen auf sie angewendet wurden. Ein Beispiel finden Sie unter Filtern von Daten mit dem XmlDataSource-Steuerelement.

Zwischenspeichern von XML-Daten mit dem XmlDataSource-Steuerelement

Das XmlDataSource-Steuerelement wird in der Regel mit einer XML-Datei verwendet. Durch das Öffnen und Lesen der XML-Datei bei jeder einzelnen Seitenanforderung wird die Leistung der Anwendung möglicherweise beeinträchtigt. Deshalb ist die Zwischenspeicherung für das XmlDataSource-Steuerelement standardmäßig aktiviert. Durch Zwischenspeichern kann die Verarbeitungslast auf dem Server auf Kosten von Arbeitsspeicher auf dem Webserver verringert werden. In den meisten Fällen handelt es sich hierbei um eine lohnende Verschiebung. Das XmlDataSource-Steuerelement speichert die Daten zwischen, wenn die EnableCaching-Eigenschaft auf true festgelegt ist (Standardwert). Sie bestimmen mit der CacheDuration-Eigenschaft die Dauer in Sekunden, für die das Steuerelement die Daten zwischenspeichern soll. Sie können CacheExpirationPolicy verwenden, um das Zwischenspeicherungsverhalten des XmlDataSource-Steuerelements detailliert festzulegen.

Wichtiger Hinweis:

Es wird empfohlen, dass Sie die EnableCaching-Eigenschaft auf false festlegen, wenn der Clientidentitätswechsel aktiviert ist und die Quelldatei für die XmlDataSource-Eigenschaft auf Grundlage der Clientidentität abgerufen wird. Wenn die Zwischenspeicherung aktiviert ist, können die zwischengespeicherten XML-Daten eines einzelnen Benutzers von allen Benutzern eingesehen werden. Es besteht die Gefahr, dass vertrauliche Informationen unerwünschten Quellen verfügbar gemacht werden. Der Clientidentitätswechsel ist aktiviert, wenn das impersonate-Attribut des identity-Konfigurationselements auf true festgelegt und die anonyme Identifikation auf dem Webserver für die Anwendung deaktiviert ist.

Zurück nach oben

Codebeispiele

Filtern von Daten mit dem XmlDataSource-Steuerelement

Binden eines tabellarischen Steuerelements an das XmlDataSource-Steuerelement

Exemplarische Vorgehensweise: Erstellen einer Webseite zum Anzeigen von XML-Daten

Zurück nach oben

Klassenreferenz

In der folgenden Tabelle werden die Hauptklassen aufgelistet, die sich auf das XmlDataSource-Steuerelement beziehen.

Member

Beschreibung

XmlDataSource

Die Hauptklasse des Steuerelements.

Zurück nach oben

Siehe auch

Referenz

Übersicht über das XML-Webserversteuerelement