Beispiel zu lose typisierten Erweiterungen
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. Dieses Beispiel veranschaulicht die grundlegenden Techniken zum Arbeiten mit Erweiterungsdaten.
Tipp
Zum Erstellen und Ausführen dieses Beispiels muss .NET Framework, Version 3.5 installiert sein. Zum Öffnen des Projekts und der Projektmappendateien ist Visual Studio 2008 erforderlich.
Für das Beispiel wird die SyndicationFeed-Klasse verwendet. Die in diesem Beispiel gezeigten Muster können jedoch mit allen Syndication-Klassen verwendet werden, die Erweiterungsdaten unterstützen:
SyndicationFeed
SyndicationItem
Beispiel-XML
Zu Referenzzwecken wird in diesem Beispiel das folgende XML-Dokument verwendet.
<?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 >hello, world!</simpleString>
<simpleString >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" >
<Key>Y</Key>
<Value>8</Value>
</XmlSerializerExtension>
<xElementExtension >
<Key attr1="someValue">Z</Key>
<Value attr1="someValue">15</Value>
</xElementExtension>
</feed>
Dieses Dokument enthält die folgenden einzelnen Erweiterungsdaten:
- Das
myAttribute
-Attribut des<feed>
-Elements. <simpleString>
-Element.<DataContractExtension>
-Element.<XmlSerializerExtension>
-Element.<xElementExtension>
-Element.
Schreiben von Erweiterungsdaten
Attributerweiterungen werden erstellt, indem man der AttributeExtensions-Auflistung Einträge hinzufügt, wie im folgenden Beispielcode gezeigt.
//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. Diese Erweiterungen können einfache Werte (wie Zeichenfolgen), XML-Serialisierungen von .NET Framework-Objekten oder manuell codierte XML-Knoten sein.
Im folgenden Beispielcode wird ein Erweiterungselement namens simpleString
erstellt.
feed.ElementExtensions.Add("simpleString", "", "hello, world!");
Der XML-Namespace für dieses Element ist der leere Namespace (""), und sein Wert ist ein Textknoten, der die Zeichenfolge "hello, world!" enthält.
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.
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.
Elementerweiterungen können auch mithilfe der SyndicationElementExtensionCollection-Klasse aus einer XmlReader-Instanz erstellt werden. Dies erlaubt eine einfache Integration in APIs für die Verarbeitung von XML (wie XElement), wie im folgenden Beispielcode gezeigt.
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 Erweiterungsdaten
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.
Console.WriteLine( feed.AttributeExtensions[ new XmlQualifiedName( "myAttribute", "" )]);
Der Zugriff auf Elementerweiterungen erfolgt mit der ReadElementExtensions<T>
-Methode.
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.
foreach (SyndicationElementExtension extension in feed2.ElementExtensions.Where<SyndicationElementExtension>(x => x.OuterName == "xElementExtension"))
{
XNode xelement = XElement.ReadFrom(extension.GetReader());
Console.WriteLine(xelement.ToString());
}
So richten Sie das Beispiel ein, erstellen es und führen es aus
Vergewissern Sie sich, dass Sie die Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation ausgeführt haben.
Zum Erstellen der C#- oder Visual Basic .NET-Edition der Projektmappe befolgen Sie die unter Erstellen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.
Wenn Sie das Beispiel in einer Konfiguration mit einem einzigen Computer oder computerübergreifend ausführen möchten, befolgen Sie die unter Durchführen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.
Siehe auch
Aufgaben
Beispiel zu stark typisierten Erweiterungen
Weitere Ressourcen
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.