Beispiel zu lose typisierten ErweiterungenLoosely-Typed Extensions Sample

Das Syndication-Objektmodell bietet umfangreiche Unterstützung zum Arbeiten mit Erweiterungsdaten – Informationen, die in der XML-Darstellung eines Syndication-Feeds vorhanden, jedoch nicht explizit durch Klassen wie SyndicationFeed und SyndicationItem verfügbar gemacht werden.The Syndication object model provides rich support for working with extension data—information that is present in a syndication feed's XML representation but not explicitly exposed by classes such as SyndicationFeed and SyndicationItem. Dieses Beispiel veranschaulicht die grundlegenden Techniken zum Arbeiten mit Erweiterungsdaten.This sample illustrates the basic techniques for working with extension data.

Für das Beispiel wird die SyndicationFeed-Klasse verwendet.The sample uses the SyndicationFeed class for the purposes of the example. Die in diesem Beispiel gezeigten Muster können jedoch mit allen Syndication-Klassen verwendet werden, die Erweiterungsdaten unterstützen:However, the patterns demonstrated in this sample can be used with all of the Syndication classes that support extension data:

SyndicationFeed

SyndicationItem

SyndicationCategory

SyndicationPerson

SyndicationLink

Beispiel-XMLSample XML

Zu Referenzzwecken wird in diesem Beispiel das folgende XML-Dokument verwendet.For reference, the following XML document is used in this sample.

<?xml version="1.0" encoding="IBM437"?>  
<feed myAttribute="someValue" xmlns="http://www.w3.org/2005/Atom">  
  <title type="text"></title>  
  <id>uuid:8f60c7b3-a3c0-4de7-a642-2165d77ce3c1;id=1</id>  
  <updated>2007-09-07T22:15:34Z</updated>  
  <simpleString xmlns="">hello, world!</simpleString>  
  <simpleString xmlns="">another simple string</simpleString>  
  <DataContractExtension xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.d  
atacontract.org/2004/07/Microsoft.Syndication.Samples">  
    <Key>X</Key>  
    <Value>4</Value>  
  </DataContractExtension>  
  <XmlSerializerExtension xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://ww  
w.w3.org/2001/XMLSchema" xmlns="">  
    <Key>Y</Key>  
    <Value>8</Value>  
  </XmlSerializerExtension>  
  <xElementExtension xmlns="">  
    <Key attr1="someValue">Z</Key>  
    <Value attr1="someValue">15</Value>  
  </xElementExtension>  
</feed>  

Dieses Dokument enthält die folgenden einzelnen Erweiterungsdaten:This document contains the following pieces of extension data:

  • Das myAttribute-Attribut des <feed>-Elements.The myAttribute attribute of the <feed> element.

  • <simpleString>-Element.<simpleString> element.

  • <DataContractExtension>-Element.<DataContractExtension> element.

  • <XmlSerializerExtension>-Element.<XmlSerializerExtension> element.

  • <xElementExtension>-Element.<xElementExtension> element.

Schreiben von ErweiterungsdatenWriting Extension Data

Attributerweiterungen werden erstellt, indem man der AttributeExtensions-Auflistung Einträge hinzufügt, wie im folgenden Beispielcode gezeigt.Attribute extensions are created by adding entries to the AttributeExtensions collection as shown in the following sample code.

//Attribute extensions are stored in a dictionary indexed by   
// XmlQualifiedName  
feed.AttributeExtensions.Add(new XmlQualifiedName("myAttribute", ""), "someValue");  

Elementerweiterungen werden erstellt, indem man der ElementExtensions-Auflistung Einträge hinzufügt.Element extensions are created by adding entries to the ElementExtensions collection. Diese Erweiterungen können einfache Werte (wie Zeichenfolgen), XML-Serialisierungen von .NET Framework-Objekten oder manuell codierte XML-Knoten sein.These extensions can by basic values such as strings, XML serializations of .NET Framework objects, or XML nodes coded by hand.

Im folgenden Beispielcode wird ein Erweiterungselement namens simpleString erstellt.The following sample code creates an extension element named simpleString.

feed.ElementExtensions.Add("simpleString", "", "hello, world!");  

Der XML-Namespace für dieses Element ist der leere Namespace ("") und sein Wert ist ein Textknoten mit der Zeichenfolge "hello, World!".The XML namespace for this element is the empty namespace ("") and its value is a text node that contains the string "hello, world!".

Eine Möglichkeit zum Erstellen komplexer Elementerweiterungen, die aus vielen verschachtelten Elementen bestehen, wäre die Verwendung der .NET Framework-APIs zur Serialisierung (sowohl DataContractSerializer als auch XmlSerializer werden unterstützt), wie in den folgenden Beispielen dargestellt.One way to create complex element extensions that consist of many nested elements is to use the .NET Framework APIs for serialization (both the DataContractSerializer and the XmlSerializer are supported) as shown in the following examples.

feed.ElementExtensions.Add( new DataContractExtension() { Key = "X", Value = 4 } );  
feed.ElementExtensions.Add( new XmlSerializerExtension { Key = "Y", Value = 8 }, new XmlSerializer( typeof( XmlSerializerExtension ) ) );  

In diesem Beispiel sind DataContractExtension und XmlSerializerExtension benutzerdefinierte, zur Verwendung mit einem Serialisierer geschriebene Typen.In this example, the DataContractExtension and XmlSerializerExtension are custom types written for use with a serializer.

Elementerweiterungen können auch mithilfe der SyndicationElementExtensionCollection-Klasse aus einer XmlReader-Instanz erstellt werden.The SyndicationElementExtensionCollection class can also be used to create element extensions from an XmlReader instance. Dies erlaubt eine einfache Integration in APIs für die Verarbeitung von XML (wie XElement), wie im folgenden Beispielcode gezeigt.This allows for easy integration with XML processing APIs such as XElement as shown in the following sample code.

feed.ElementExtensions.Add(new XElement("xElementExtension",  
        new XElement("Key", new XAttribute("attr1", "someValue"), "Z"),  
        new XElement("Value", new XAttribute("attr1", "someValue"),   
        "15")).CreateReader());  

Lesen von ErweiterungsdatenReading Extension Data

Die Werte für Attributerweiterungen können erhalten werden, indem das Attribut in der AttributeExtensions-Auflistung anhand seines XmlQualifiedName nachgeschlagen wird, wie im folgenden Beispielcode gezeigt.The values for attribute extensions can be obtained by looking up the attribute in the AttributeExtensions collection by its XmlQualifiedName as shown in the following sample code.

Console.WriteLine( feed.AttributeExtensions[ new XmlQualifiedName( "myAttribute", "" )]);  

Der Zugriff auf Elementerweiterungen erfolgt mit der ReadElementExtensions<T>-Methode.Element extensions are accessed using the ReadElementExtensions<T> method.

foreach( string s in feed2.ElementExtensions.ReadElementExtensions<string>("simpleString", ""))  
{  
    Console.WriteLine(s);  
}  

foreach (DataContractExtension dce in feed2.ElementExtensions.ReadElementExtensions<DataContractExtension>("DataContractExtension",  
"http://schemas.datacontract.org/2004/07/SyndicationExtensions"))  
{  
    Console.WriteLine(dce.ToString());  
}  

foreach (XmlSerializerExtension xse in feed2.ElementExtensions.ReadElementExtensions<XmlSerializerExtension>("XmlSerializerExtension", "", new XmlSerializer(typeof(XmlSerializerExtension))))  
{  
    Console.WriteLine(xse.ToString());  
}  

Es ist auch möglich, einen XmlReader bei einzelnen Elementerweiterungen mithilfe der GetReader()-Methode abzurufen.It is also possible to obtain an XmlReader at individual element extensions by using the GetReader() method.

foreach (SyndicationElementExtension extension in feed2.ElementExtensions.Where<SyndicationElementExtension>(x => x.OuterName == "xElementExtension"))  
{  
    XNode xelement = XElement.ReadFrom(extension.GetReader());  
    Console.WriteLine(xelement.ToString());  
}  

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Um das Beispiel in einer einzelnen oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) - und WFWF -Beispiele herunterzuladen.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Syndication\LooselyTypedExtensions

Siehe auchSee Also

Stark typisierte ErweiterungenStrongly-Typed Extensions
WCF SyndicationWCF Syndication