Gevşek yazılan uzantılar örneği

LooselyTypedExtensions örneği, uzantı verileriyle çalışmaya yönelik temel teknikleri gösterir.

Dağıtım nesne modeli, uzantı verileriyle çalışmak için zengin destek sağlar. Dağıtım akışının XML gösteriminde bulunan ancak ve SyndicationItemgibi SyndicationFeed sınıflar tarafından açıkça sunulmayan bilgiler.

Örnek, örneğin amaçları için sınıfını kullanır SyndicationFeed . Ancak, bu örnekte belirtilen desenler uzantı verilerini destekleyen tüm Dağıtım sınıflarıyla kullanılabilir:

SyndicationFeed

SyndicationItem

SyndicationCategory

SyndicationPerson

SyndicationLink

Örnek XML

Başvuru için, bu örnekte aşağıdaki XML belgesi kullanılır.

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

Bu belge aşağıdaki uzantı verilerini içerir:

  • myAttribute öğesinin <feed> özniteliği.

  • <simpleString> Öğe.

  • <DataContractExtension> Öğe.

  • <XmlSerializerExtension> Öğe.

  • <xElementExtension> Öğe.

Uzantı Verileri Yazma

Öznitelik uzantıları, aşağıdaki örnek kodda gösterildiği gibi koleksiyona AttributeExtensions girdiler eklenerek oluşturulur.

//Attribute extensions are stored in a dictionary indexed by
// XmlQualifiedName
feed.AttributeExtensions.Add(new XmlQualifiedName("myAttribute", ""), "someValue");

Öğe uzantıları, koleksiyona ElementExtensions girdiler eklenerek oluşturulur. Bu uzantılar dizeler, .NET Framework nesnelerinin XML serileştirmeleri veya elle kodlanmış XML düğümleri gibi temel değerlere göre olabilir.

Aşağıdaki örnek kod adlı simpleStringbir uzantı öğesi oluşturur.

feed.ElementExtensions.Add("simpleString", "", "hello, world!");

Bu öğenin XML ad alanı boş ad alanıdır ("") ve değeri "hello, world!" dizesini içeren bir metin düğümüdür.

Birçok iç içe öğeden oluşan karmaşık öğe uzantıları oluşturmanın bir yolu, aşağıdaki örneklerde gösterildiği gibi serileştirme için .NET Framework API'lerini kullanmaktır (hem hem DataContractSerializer hem XmlSerializer de desteklenir).

feed.ElementExtensions.Add( new DataContractExtension() { Key = "X", Value = 4 } );
feed.ElementExtensions.Add( new XmlSerializerExtension { Key = "Y", Value = 8 }, new XmlSerializer( typeof( XmlSerializerExtension ) ) );

Bu örnekte, DataContractExtension ve XmlSerializerExtension bir seri hale getirici ile kullanılmak üzere yazılmış özel türlerdir.

Sınıfı, SyndicationElementExtensionCollection bir XmlReader örnekten öğe uzantıları oluşturmak için de kullanılabilir. Bu, aşağıdaki örnek kodda gösterildiği gibi XElement XML işleme API'leriyle kolay tümleştirme sağlar.

feed.ElementExtensions.Add(new XElement("xElementExtension",
        new XElement("Key", new XAttribute("attr1", "someValue"), "Z"),
        new XElement("Value", new XAttribute("attr1", "someValue"),
        "15")).CreateReader());

Uzantı Verilerini Okuma

Öznitelik uzantılarının değerleri, aşağıdaki örnek kodda gösterildiği gibi koleksiyonundaki AttributeExtensions özniteliği aranarak XmlQualifiedName elde edilebilir.

Console.WriteLine( feed.AttributeExtensions[ new XmlQualifiedName( "myAttribute", "" )]);

Öğe uzantılarına ReadElementExtensions<T> yöntemi kullanılarak erişilir.

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());
}

Yöntemini kullanarak GetReader() tek tek öğe uzantılarında da bir XmlReader elde etmek mümkündür.

foreach (SyndicationElementExtension extension in feed2.ElementExtensions.Where<SyndicationElementExtension>(x => x.OuterName == "xElementExtension"))
{
    XNode xelement = XElement.ReadFrom(extension.GetReader());
    Console.WriteLine(xelement.ToString());
}

Örneği ayarlamak, derlemek ve çalıştırmak için

  1. Windows Communication Foundation Örnekleri için Tek Seferlik Kurulum Yordamı'nı gerçekleştirdiğinizden emin olun.

  2. Çözümün C# veya Visual Basic .NET sürümünü oluşturmak için Windows Communication Foundation Örnekleri Oluşturma başlığındaki yönergeleri izleyin.

  3. Örneği tek veya makineler arası bir yapılandırmada çalıştırmak için Windows Communication Foundation Örneklerini Çalıştırma başlığındaki yönergeleri izleyin.

Ayrıca bkz.