Binden an XML-Daten mithilfe von XMLDataProvider und XPath-Abfragen
TOC
Inhaltsverzeichnis reduzieren
Inhaltsverzeichnis erweitern
Markieren Sie das Kontrollkästchen Englisch, um die englische Version dieses Artikels anzuzeigen. Sie können den englischen Text auch in einem Popup-Fenster einblenden, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Gewusst wie: Binden an XML-Daten mithilfe von XMLDataProvider und XPath-Abfragen

 

Veröffentlicht: Juni 2016

Dieses Beispiel zeigt, wie Daten mit einem XmlDataProvider an XML gebunden werden.

Mit einem XmlDataProvider können Sie mithilfe der Datenbindung auf die Ihrer Anwendung zugrunde liegenden XML-Knotenstrukturen zugreifen. Mit anderen Worten: Ein XmlDataProvider bietet eine komfortable Möglichkeit, jede beliebige Struktur von XML-Knoten als Bindungsquelle zu verwenden.

Beispiel

Im folgenden Beispiel werden die Daten direkt als XML-Dateninsel im Abschnitt Resources eingebettet. Eine XML-Dateninsel muss mit <x:XData>-Tags umschlossen sein und immer über einen einzelnen Stammknoten, in diesem Beispiel Inventory, verfügen.

System_CAPS_noteHinweis

Der Stammknoten der XML-Daten verfügt über ein xmlns-Attribut, das den XML-Namespace auf eine leere Zeichenfolge festlegt. Dies ist eine Anforderung für die Anwendung von XPath-Abfragen auf eine Dateninsel, die sich inline innerhalb der XAML-Seite befindet. In diesem Inlinefall erbt XAML, und damit die Dateninsel, den System.Windows-Namespace. Aus diesem Grund müssen Sie den Namespace auf eine leere Zeichenfolge festlegen und verhindern so, dass XPath-Abfragen vom System.Windows-Namespace bestimmt werden, was zu fehlgeleiteten Abfragen führen würde.

Wie in diesem Beispiel veranschaulicht, müssen Sie zur Erstellung derselben Bindungsdeklaration in Attributsyntax die Sonderzeichen ordnungsgemäß mit einem Escapezeichen versehen. Weitere Informationen hierzu finden Sie unter XML-Zeichenentitäten und XAML.

Wenn dieses Beispiel ausgeführt wird, zeigt das ListBox die folgenden Elemente an. Das sind die Title-Angaben aller Elemente unter Books, deren Stock-Wert entweder "out" (vergriffen) lautet oder einen Number-Wert von 3 bzw. größer/gleich 8 aufweist. Beachten Sie, dass keine CD-Elemente zurückgegeben werden, da der im XmlDataProvider-Element festgelegte XPath-Wert angibt, dass nur die Books-Elemente zur Verfügung gestellt werden sollen (durch die Einrichtung eines Filters).

XPath-Beispiel

In diesem Beispiel werden die Buchtitel angezeigt, weil der XPath der TextBlock-Bindung in der DataTemplate auf "Title" festgelegt ist. Um den Wert eines Attributs anzuzeigen, z. B. ISBN, legen Sie den XPath-Wert auf "@ISBN" fest.

Die XPath-Eigenschaften in WPF werden von der XmlNode.SelectNodes-Methode behandelt. Sie können die XPath-Abfragen ändern, um andere Ergebnisse abzurufen. Es folgen einige Beispiele der XPath-Abfrage für das gebundene ListBox des vorherigen Beispiels:

  • XPath="Book[1]" gibt das erste Buchelement ("XML in Action") zurück. Beachten Sie, dass XPath-Indizes auf 1, nicht auf 0, basieren.

  • XPath="Book[@*]" gibt alle Buchelemente mit beliebigen Attributen zurück.

  • XPath="Book[last()-1]" gibt das vorletzte Buchelement ("Introducing Microsoft .NET") zurück.

  • XPath="*[position()>3]" gibt außer den ersten 3 Buchelementen alle Buchelemente zurück.

Wenn Sie eine XPath-Abfrage ausführen, gibt sie ein XmlNode-Element oder eine Liste von XmlNodes zurück. Ein XmlNode-Element ist ein Common Language Runtime (CLR)-Objekt. Das bedeutet, dass Sie die Path-Eigenschaft zur Bindung an die Common Language Runtime (CLR)-Eigenschaften verwenden können. Betrachten Sie erneut das vorherige Beispiel. Wenn Sie den Rest des Beispiels unverändert lassen und nur die TextBlock-Bindung wie folgt ändern, werden im ListBox die Namen der zurückgegebenen XmlNodes angezeigt. In diesem Fall lautet der Name aller zurückgegebenen Knoten "Book".

In bestimmten Anwendungen ist das Einbetten von XML als Dateninsel in die Quelle der XAML-Seite nicht geeignet, da zur Kompilierzeit der genaue Inhalt der Daten bekannt sein muss. Aus diesem Grund wird das Abrufen von Daten aus einer externen XML-Datei ebenso unterstützt. Das folgende Beispiel veranschaulicht dies.

<XmlDataProvider x:Key="BookData" Source="data\bookdata.xml" XPath="Books"/>

Wenn die XML-Daten in einer XML-Remotedatei gespeichert sind, definieren Sie den Zugriff auf die Daten durch das Zuweisen einer geeigneten URL zum Source-Attribut. Das folgende Beispiel veranschaulicht dies:

<XmlDataProvider x:Key="BookData" Source="http://MyUrl" XPath="Books"/>
Anzeigen:
© 2016 Microsoft