Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Im Beispiel "LooselyTypedExtensions " werden die grundlegenden Techniken zum Arbeiten mit Erweiterungsdaten veranschaulicht.
Das Syndication-Objektmodell bietet umfassende Unterstützung, um mit Erweiterungsdaten zu arbeiten – Informationen, die in der XML-Darstellung eines Veröffentlichungsfeeds vorhanden sind, jedoch nicht explizit von Klassen wie SyndicationFeed und SyndicationItem offengelegt werden.
Im Beispiel wird die SyndicationFeed Klasse für die Zwecke des Beispiels verwendet. Die in diesem Beispiel gezeigten Muster können jedoch mit allen Syndication-Klassen verwendet werden, die Erweiterungsdaten unterstützen:
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 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 Erweiterungsdaten:
Das
myAttributeAttribut des<feed>Elements.<simpleString>Element.<DataContractExtension>Element.<XmlSerializerExtension>Element.<xElementExtension>Element.
Schreiben von Erweiterungsdaten
Attributerweiterungen werden durch Hinzufügen von Einträgen zur AttributeExtensions Auflistung erstellt, wie im folgenden Beispielcode gezeigt.
//Attribute extensions are stored in a dictionary indexed by
// XmlQualifiedName
feed.AttributeExtensions.Add(new XmlQualifiedName("myAttribute", ""), "someValue");
Elementerweiterungen werden durch Hinzufügen von Einträgen zur ElementExtensions Auflistung erstellt. Diese Erweiterungen können einfache Werte (wie Zeichenfolgen), XML-Serialisierungen von .NET Framework-Objekten oder manuell codierte XML-Knoten sein.
Der folgende Beispielcode erstellt ein Erweiterungselement mit dem Namen simpleString.
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, komplexe Erweiterungen von Elementen zu erstellen, die aus vielen geschachtelten Elementen bestehen, ist die Verwendung der .NET Framework-APIs für die Serialisierung (sowohl DataContractSerializer als auch XmlSerializer werden unterstützt), wie in den nachstehenden Beispielen gezeigt.
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 die benutzerdefinierten Typen DataContractExtension und XmlSerializerExtension für die Verwendung mit einem Serialisierer erstellt.
Die SyndicationElementExtensionCollection Klasse kann auch zum Erstellen von Elementerweiterungen aus einer XmlReader Instanz verwendet werden. Dies ermöglicht eine einfache Integration mit XML-Verarbeitungs-APIs wie XElement, z. B. im folgenden Beispielcode dargestellt.
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 abgerufen werden, indem man das Attribut in der AttributeExtensions-Sammlung nach seinem XmlQualifiedName nachschlägt, wie im folgenden Beispielcode gezeigt.
Console.WriteLine( feed.AttributeExtensions[ new XmlQualifiedName( "myAttribute", "" )]);
Auf Elementerweiterungen wird mithilfe der ReadElementExtensions<T> Methode zugegriffen.
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 können Sie das Beispiel einrichten, erstellen und ausführen
Stellen Sie sicher, dass Sie das One-Time Setup-Verfahren für die Windows Communication Foundation-Beispieleausgeführt haben.
Um die C#- oder Visual Basic .NET-Edition der Lösung zu erstellen, befolgen Sie die Anweisungen in Building the Windows Communication Foundation Samples.
Wenn Sie das Beispiel in einer Konfiguration mit einem Computer oder über Computer hinweg ausführen möchten, folgen Sie den Anweisungen unter Durchführen der Windows Communication Foundation-Beispiele.