Sdílet prostřednictvím


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í:

SyndicationFeed

SyndicationItem

SyndicationCategory

SyndicationPerson

SyndicationLink

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 DataContractExtensionXmlSerializerExtension 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

  1. Ujistěte se, že jste pro ukázky windows Communication Foundation provedli jednorázovou instalační proceduru.

  2. Pokud chcete sestavit edici C# nebo Visual Basic .NET řešení, postupujte podle pokynů v části Sestavení ukázek windows Communication Foundation.

  3. 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.

Viz také