Exempel på löst skrivna tillägg
Exemplet LooselyTypedExtensions illustrerar de grundläggande teknikerna för att arbeta med tilläggsdata.
Syndikeringsobjektmodellen ger omfattande stöd för att arbeta med tilläggsdata – information som finns i en syndikeringsfeeds XML-representation men som inte uttryckligen exponeras av klasser som SyndicationFeed och SyndicationItem.
Exemplet använder SyndicationFeed klassen i exemplet. De mönster som visas i det här exemplet kan dock användas med alla syndikeringsklasser som stöder tilläggsdata:
Xml-exempel
Som referens används följande XML-dokument i det här exemplet.
<?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>
Det här dokumentet innehåller följande tilläggsdata:
Elementets
myAttribute
<feed>
attribut.<simpleString>
element.<DataContractExtension>
element.<XmlSerializerExtension>
element.<xElementExtension>
element.
Skriva tilläggsdata
Attributtillägg skapas genom att poster läggs till i AttributeExtensions samlingen enligt följande exempelkod.
//Attribute extensions are stored in a dictionary indexed by
// XmlQualifiedName
feed.AttributeExtensions.Add(new XmlQualifiedName("myAttribute", ""), "someValue");
Elementtillägg skapas genom att poster läggs till i ElementExtensions samlingen. Dessa tillägg kan användas med grundläggande värden som strängar, XML-serialiseringar av .NET Framework-objekt eller XML-noder som kodas för hand.
Följande exempelkod skapar ett tilläggselement med namnet simpleString
.
feed.ElementExtensions.Add("simpleString", "", "hello, world!");
XML-namnområdet för det här elementet är det tomma namnområdet ("") och dess värde är en textnod som innehåller strängen "hello, world!".
Ett sätt att skapa komplexa elementtillägg som består av många kapslade element är att använda .NET Framework-API:erna för serialisering (både DataContractSerializer och XmlSerializer stöds) enligt följande exempel.
feed.ElementExtensions.Add( new DataContractExtension() { Key = "X", Value = 4 } );
feed.ElementExtensions.Add( new XmlSerializerExtension { Key = "Y", Value = 8 }, new XmlSerializer( typeof( XmlSerializerExtension ) ) );
I det här exemplet DataContractExtension
är och XmlSerializerExtension
anpassade typer skrivna för användning med en serialiserare.
Klassen SyndicationElementExtensionCollection kan också användas för att skapa elementtillägg från en XmlReader instans. Detta möjliggör enkel integrering med API:er för XML-bearbetning, till exempel XElement som visas i följande exempelkod.
feed.ElementExtensions.Add(new XElement("xElementExtension",
new XElement("Key", new XAttribute("attr1", "someValue"), "Z"),
new XElement("Value", new XAttribute("attr1", "someValue"),
"15")).CreateReader());
Läsa tilläggsdata
Värdena för attributtillägg kan hämtas genom att leta upp attributet i AttributeExtensions samlingen med dess XmlQualifiedName enligt följande exempelkod.
Console.WriteLine( feed.AttributeExtensions[ new XmlQualifiedName( "myAttribute", "" )]);
Elementtillägg används med hjälp av ReadElementExtensions<T>
-metoden.
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());
}
Det går också att hämta ett XmlReader
vid enskilda elementtillägg med hjälp GetReader() av metoden .
foreach (SyndicationElementExtension extension in feed2.ElementExtensions.Where<SyndicationElementExtension>(x => x.OuterName == "xElementExtension"))
{
XNode xelement = XElement.ReadFrom(extension.GetReader());
Console.WriteLine(xelement.ToString());
}
Så här konfigurerar du, skapar och kör exemplet
Kontrollera att du har utfört engångsinstallationsproceduren för Windows Communication Foundation-exempel.
Om du vill skapa C# eller Visual Basic .NET-versionen av lösningen följer du anvisningarna i Skapa Windows Communication Foundation-exempel.
Om du vill köra exemplet i en konfiguration med en eller flera datorer följer du anvisningarna i Köra Windows Communication Foundation-exempel.