Share via


Esempio di estensioni non fortemente tipizzate

Il modello a oggetti di diffusione fornisce supporto dettagliato per lavorare con dati dell'estensione: informazioni presenti nella rappresentazione XML di un feed ma non esposte in modo esplicito da classi quali SyndicationFeed e SyndicationItem. Questo esempio illustra le tecniche di base per lavorare con i dati dell'estensione.

Nota

Per poter essere compilato ed eseguito, l'esempio richiede che sia installato .NET Framework versione 3.5. Per aprire il progetto e i file della soluzione è necessario Visual Studio 2008.

Nell'esempio seguente viene utilizzata la classe SyndicationFeed a scopo esemplificativo. Tuttavia, i modelli illustrati in questo esempio possono essere utilizzati con tutte le classi di diffusione che supportano dati di estensione:

SyndicationFeed

SyndicationItem

SyndicationCategory

SyndicationPerson

SyndicationLink

Esempio XML

A scopo di riferimento, in questo esempio viene utilizzato il documento XML seguente.

<?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 >hello, world!</simpleString>
  <simpleString >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" >
    <Key>Y</Key>
    <Value>8</Value>
  </XmlSerializerExtension>
  <xElementExtension >
    <Key attr1="someValue">Z</Key>
    <Value attr1="someValue">15</Value>
  </xElementExtension>
</feed>

Questo documento contiene le seguenti porzioni di dati dell'estensione:

  • Attributo myAttribute dell'elemento <feed>.
  • Elemento <simpleString>.
  • Elemento <DataContractExtension>.
  • Elemento <XmlSerializerExtension>.
  • Elemento <xElementExtension>.

Scrittura dati dell'estensione

Le estensioni dell'attributo vengono create aggiungendo voci all'insieme AttributeExtensions come mostra il codice di esempio seguente.

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

Le estensioni dell'elemento vengono create aggiungendo voci all'insieme ElementExtensions. Queste estensioni possono essere valori di base quali stringhe, serializzazioni XML di oggetti .NET Framework o nodi XML codificati a mano.

Il codice di esempio seguente crea un elemento dell'estensione denominato simpleString.

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

Lo spazio dei nomi XML per questo elemento è lo spazio dei nomi vuoto ("") e il valore è un nodo di testo che contiene la stringa "hello, world!".

Un modo per creare estensioni dell'elemento complesse costituite da molti elementi nidificati, consiste nell'utilizzare le API .NET Framework per la serializzazione (sia DataContractSerializer sia XmlSerializer sono supportate), come illustrato negli esempi seguenti.

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

In questo esempio, DataContractExtension e XmlSerializerExtension sono tipi personalizzati scritti per l'utilizzo con un serializzatore.

La classe SyndicationElementExtensionCollection può essere utilizzata anche per creare estensioni dell'elemento da un'istanza XmlReader. Ciò consente una facile integrazione con l'elaborazione API XML ad esempio XElement come mostra il codice di esempio seguente.

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

Lettura dati dell'estensione

I valori per le estensioni dell'attributo possono essere ottenuti cercando l'attributo nell'insieme AttributeExtensions tramite la classe XmlQualifiedName come mostra il codice di esempio seguente.

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

L'accesso alle estensioni dell'elemento viene effettuato utilizzando il metodo 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());
}

È anche possibile ottenere un XmlReader per estensioni dell'elemento singole utilizzando il metodo GetReader.

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

Per impostare, compilare ed eseguire l'esempio DIBLOOK

  1. Assicurarsi di aver eseguito la Procedura di installazione singola per gli esempi di Windows Communication Foundation.

  2. Per compilare l'edizione in C# o Visual Basic .NET della soluzione, seguire le istruzioni in Generazione degli esempi Windows Communication Foundation.

  3. Per eseguire l'esempio su un solo computer o tra computer diversi, seguire le istruzioni in Esecuzione degli esempi di Windows Communication Foundation.

Vedere anche

Attività

Esempio di estensioni fortemente tipizzate

Altre risorse

WCF Syndication

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.