Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'esempio LooselyTypedExtensions illustra le tecniche di base per l'uso dei dati di estensione.
Il modello a oggetti di diffusione offre supporto avanzato per l'uso dei dati di estensione, ovvero informazioni presenti nella rappresentazione XML di un feed di diffusione, ma non esposte in modo esplicito da classi come SyndicationFeed e SyndicationItem.
L'esempio utilizza la classe SyndicationFeed a scopo dimostrativo. Tuttavia, gli schemi dimostrati in questo esempio possono essere usati con tutte le classi di Syndication che supportano i dati di estensione.
XML di esempio
Per riferimento, in questo esempio viene usato 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 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>
Questo documento contiene i dati di estensione seguenti:
Attributo
myAttribute
dell'elemento<feed>
.<simpleString>
elemento.<DataContractExtension>
elemento.<XmlSerializerExtension>
elemento.<xElementExtension>
elemento.
Scrittura di dati di estensione
Le estensioni degli attributi vengono create aggiungendo voci alla AttributeExtensions raccolta, come illustrato nel codice di esempio seguente.
//Attribute extensions are stored in a dictionary indexed by
// XmlQualifiedName
feed.AttributeExtensions.Add(new XmlQualifiedName("myAttribute", ""), "someValue");
Le estensioni degli elementi vengono create aggiungendo elementi alla raccolta ElementExtensions. Queste estensioni possono essere valori di base, come stringhe, serializzazioni XML di oggetti .NET Framework o nodi XML scritti a mano.
Il codice di esempio seguente crea un elemento di estensione denominato simpleString
.
feed.ElementExtensions.Add("simpleString", "", "hello, world!");
Lo spazio dei nomi XML per questo elemento è lo spazio dei nomi vuoto ("") e il relativo valore è un nodo di testo contenente la stringa "hello, world!".
Un modo per creare estensioni di elementi complessi costituiti da molti elementi annidati consiste nell'usare le API .NET Framework per la serializzazione (sia che DataContractSerializerXmlSerializer 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, i DataContractExtension
e XmlSerializerExtension
sono tipi personalizzati scritti per l'uso con un serializzatore.
La SyndicationElementExtensionCollection classe può essere usata anche per creare estensioni degli elementi da un'istanza XmlReader di . In questo modo è possibile semplificare l'integrazione con le API di elaborazione XML, ad XElement esempio come illustrato nel 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 dei dati dell'estensione
I valori delle estensioni degli attributi possono essere ottenuti cercando l'attributo nella raccolta AttributeExtensions utilizzando il proprio XmlQualifiedName, come illustrato nel codice di esempio seguente.
Console.WriteLine( feed.AttributeExtensions[ new XmlQualifiedName( "myAttribute", "" )]);
È possibile accedere alle estensioni degli elementi usando il ReadElementExtensions<T>
metodo .
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 oggetto XmlReader
in base alle singole estensioni degli elementi usando il GetReader() metodo .
foreach (SyndicationElementExtension extension in feed2.ElementExtensions.Where<SyndicationElementExtension>(x => x.OuterName == "xElementExtension"))
{
XNode xelement = XElement.ReadFrom(extension.GetReader());
Console.WriteLine(xelement.ToString());
}
Per configurare, compilare ed eseguire l'esempio
Assicurati di aver eseguito la procedura di installazione di One-Time per gli esempi di Windows Communication Foundation.
Per compilare l'edizione C# o Visual Basic .NET della soluzione, seguire le istruzioni in Compilazione degli esempi di Windows Communication Foundation.
Per eseguire l'esempio in una configurazione con computer singolo o incrociato, seguire le istruzioni riportate in Esecuzione degli esempi di Windows Communication Foundation.
Vedere anche
- Estensioni fortemente tipate
- di diffusione WCF