Bagikan melalui


Sampel ekstensi yang ditik secara longgar

Sampel LooselyTypedExtensions mengilustrasikan teknik dasar untuk bekerja dengan data ekstensi.

Model objek Sindikasi memberikan dukungan yang kaya untuk bekerja dengan data ekstensi—informasi yang ada dalam representasi XML umpan sindikasi tetapi tidak secara eksplisit diekspos oleh kelas seperti SyndicationFeed dan SyndicationItem.

Sampel menggunakan kelas SyndicationFeed untuk tujuan contoh. Namun, pola yang ditunjukkan dalam sampel ini dapat digunakan dengan semua kelas Sindikasi yang mendukung data ekstensi:

SyndicationFeed

SyndicationItem

SyndicationCategory

SyndicationPerson

SyndicationLink

XML Sampel

Sebagai referensi, dokumen XML berikut digunakan dalam sampel ini.

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

Dokumen ini berisi potongan data ekstensi berikut:

  • Atribut myAttribute dari elemen <feed>.

  • <simpleString> elemen.

  • <DataContractExtension> elemen.

  • <XmlSerializerExtension> elemen.

  • <xElementExtension> elemen.

Menulis Data Ekstensi

Ekstensi atribut dibuat dengan menambahkan entri ke koleksi AttributeExtensions seperti yang ditunjukkan dalam kode sampel berikut.

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

Ekstensi elemen dibuat dengan menambahkan entri ke koleksi ElementExtensions. Ekstensi ini dapat berdasarkan nilai dasar seperti string, serialisasi XML objek .NET Framework, atau simpul XML yang dikodekan secara manual.

Kode sampel berikut membuat elemen ekstensi bernama simpleString.

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

Namespace XML untuk elemen ini adalah namespace kosong ("") dan nilainya adalah simpul teks yang berisi string "hello, world!".

Salah satu cara untuk membuat ekstensi elemen kompleks yang terdiri dari banyak elemen berlapis adalah dengan menggunakan API .NET Framework untuk serialisasi (DataContractSerializer dan XmlSerializer didukung) seperti yang ditunjukkan dalam contoh berikut.

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

Dalam contoh ini, DataContractExtension dan XmlSerializerExtension adalah jenis kustom yang ditulis untuk digunakan dengan serializer.

Kelas SyndicationElementExtensionCollection juga dapat digunakan untuk membuat ekstensi elemen dari instans XmlReader. Ini memungkinkan integrasi yang mudah dengan API pemrosesan XML seperti XElement yang ditunjukkan dalam kode sampel berikut.

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

Membaca Data Ekstensi

Nilai untuk ekstensi atribut dapat diperoleh dengan mencari atribut dalam koleksi AttributeExtensions dengan XmlQualifiedName yang ditunjukkan dalam kode sampel berikut.

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

Ekstensi elemen diakses menggunakan metode ReadElementExtensions<T>.

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

Dimungkinkan juga untuk mendapatkan XmlReader pada ekstensi elemen individual dengan menggunakan metode GetReader().

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

Untuk menyiapkan, membangun, dan menjalankan sampel

  1. Pastikan Anda telah melakukan Prosedur Penyiapan Satu Kali untuk Sampel Windows Communication Foundation.

  2. Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti petunjuknya di Membangun Sampel WCF.

  3. Untuk menjalankan sampel dalam konfigurasi satu atau lintas komputer, ikuti instruksi pada Menjalankan Sampel WCF.

Lihat juga