共用方式為


鬆散類型的延伸模組範例

LooselyTypedExtensions 範例說明使用延伸模組數據的基本技術。

內容訂閱物件模型提供處理擴充資料的豐富支援,這些資訊存在於內容訂閱摘要的 XML 表示法中,但不會由例如以下類別SyndicationFeedSyndicationItem類別明確公開。

此範例使用 SyndicationFeed 類別來達到範例的目的。 不過,此範例中示範的模式可以與支援擴展數據的所有整合類別搭配使用:

SyndicationFeed

SyndicationItem

SyndicationCategory

SyndicationPerson

SyndicationLink

範例 XML

如需參考,此範例會使用下列 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>

本檔案包含下列延伸模組資料:

  • myAttribute 元素的 <feed> 屬性。

  • <simpleString> 元素。

  • <DataContractExtension> 元素。

  • <XmlSerializerExtension> 元素。

  • <xElementExtension> 元素。

寫入延伸模組數據

屬性延伸模組是藉由將專案新增至 AttributeExtensions 集合來建立,如下列範例程式碼所示。

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

元素擴展是藉由將項目新增至集合ElementExtensions中來建立。 這些延伸模組可以是基本值,例如字串、.NET Framework 物件的 XML 序列化,或手動撰寫的 XML 節點。

下列範例程式代碼會建立名為 simpleString 的擴充元件。

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

這個專案的 XML 命名空間是空命名空間 (“”),其值是包含字元串 “hello, world!” 的文字節點。

建立包含許多巢狀元素的複雜元素延伸的其中一種方法,是使用 .NET Framework API 進行序列化(DataContractSerializerXmlSerializer 均受支援),如下列範例所示。

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

在此範例中, DataContractExtensionXmlSerializerExtension 是用來與串行化程式搭配使用的自定義型別。

類別 SyndicationElementExtensionCollection 也可以用來從 XmlReader 實例建立專案延伸。 這可讓您輕鬆地與 XML 處理 API 整合,例如 XElement 下列範例程式代碼所示。

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

讀取擴充功能數據

藉由查閱 集合AttributeExtensions中的 XmlQualifiedName 屬性,即可取得屬性延伸的值,如下列範例程式代碼所示。

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

元素擴展是使用 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());
}

您也可以使用 XmlReader 方法,在每個元素擴展中取得 GetReader()

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

要設定、建置和執行範例,請執行以下步驟:

  1. 請確定您已針對 Windows Communication Foundation 範例 執行One-Time 安裝程式。

  2. 若要建置解決方案的 C# 或 Visual Basic .NET 版本,請遵循建置 Windows Communication Foundation 範例 中的指示。

  3. 若要在單一或跨計算機組態中執行範例,請遵循執行 Windows Communication Foundation 範例 中的指示。

另請參閱