Ukázka volně zadaných rozšíření
Ukázka LooselyTypedExtensions znázorňuje základní techniky pro práci s daty rozšíření.
Model objektu Syndication poskytuje bohatou podporu pro práci s daty rozšíření – informace, které se nacházejí v reprezentaci XML datového kanálu syndikace, ale nejsou explicitně zpřístupněny třídami, jako SyndicationFeed jsou a SyndicationItem.
Ukázka používá SyndicationFeed třídu pro účely příkladu. Vzory demonstrované v této ukázce se ale dají použít se všemi třídami syndikace, které podporují data rozšíření:
Ukázkový KÓD XML
Pro referenci se v této ukázce používá následující dokument XML.
<?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>
Tento dokument obsahuje následující části dat rozšíření:
Atribut
myAttribute
elementu<feed>
.<simpleString>
Prvek.<DataContractExtension>
Prvek.<XmlSerializerExtension>
Prvek.<xElementExtension>
Prvek.
Zápis dat rozšíření
Rozšíření atributů se vytvářejí přidáním položek do AttributeExtensions kolekce, jak je znázorněno v následujícím vzorovém kódu.
//Attribute extensions are stored in a dictionary indexed by
// XmlQualifiedName
feed.AttributeExtensions.Add(new XmlQualifiedName("myAttribute", ""), "someValue");
Rozšíření elementů se vytvářejí přidáním položek do ElementExtensions kolekce. Tato rozšíření mohou mít základní hodnoty, jako jsou řetězce, serializace XML objektů rozhraní .NET Framework nebo uzly XML kódované ručně.
Následující ukázkový kód vytvoří rozšiřující prvek s názvem simpleString
.
feed.ElementExtensions.Add("simpleString", "", "hello, world!");
Obor názvů XML pro tento prvek je prázdný obor názvů ("") a jeho hodnota je textový uzel, který obsahuje řetězec "hello, world!".
Jedním zezpůsobůchm funkcím je vytvoření komplexních rozšíření elementů, která se skládají z mnoha vnořených elementů, je použití rozhraní API rozhraní .NET Framework pro DataContractSerializerXmlSerializer
feed.ElementExtensions.Add( new DataContractExtension() { Key = "X", Value = 4 } );
feed.ElementExtensions.Add( new XmlSerializerExtension { Key = "Y", Value = 8 }, new XmlSerializer( typeof( XmlSerializerExtension ) ) );
V tomto příkladu jsou DataContractExtension
XmlSerializerExtension
vlastní typy napsané pro použití se serializátorem.
Třídu SyndicationElementExtensionCollection lze také použít k vytvoření rozšíření elementů XmlReader z instance. To umožňuje snadnou integraci s rozhraními API pro zpracování XML, jako XElement je znázorněno v následujícím vzorovém kódu.
feed.ElementExtensions.Add(new XElement("xElementExtension",
new XElement("Key", new XAttribute("attr1", "someValue"), "Z"),
new XElement("Value", new XAttribute("attr1", "someValue"),
"15")).CreateReader());
Čtení dat rozšíření
Hodnoty rozšíření atributů lze získat vyhledáním atributu AttributeExtensions v kolekci podle jejího XmlQualifiedName příkladu, jak je znázorněno v následujícím vzorovém kódu.
Console.WriteLine( feed.AttributeExtensions[ new XmlQualifiedName( "myAttribute", "" )]);
K rozšířením elementů ReadElementExtensions<T>
se přistupuje pomocí metody.
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());
}
Pomocí metody je také možné získat XmlReader
rozšíření jednotlivých prvků GetReader() .
foreach (SyndicationElementExtension extension in feed2.ElementExtensions.Where<SyndicationElementExtension>(x => x.OuterName == "xElementExtension"))
{
XNode xelement = XElement.ReadFrom(extension.GetReader());
Console.WriteLine(xelement.ToString());
}
Nastavení, sestavení a spuštění ukázky
Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.
Pokud chcete sestavit edici C# nebo Visual Basic .NET řešení, postupujte podle pokynů v části Sestavení ukázek windows Communication Foundation.
Pokud chcete spustit ukázku v konfiguraci s jedním nebo více počítači, postupujte podle pokynů v části Spuštění ukázek windows Communication Foundation.