Loosely-Typed Extensions, exemple
Le modèle objet de syndication fournit une prise en charge complète pour l'utilisation des données d'extension : informations présentes dans la représentation XML d'un flux de syndication, mais qui ne sont pas exposées explicitement par les classes telles que SyndicationFeed et SyndicationItem. Cet exemple présente les techniques de base d'utilisation des données d'extension.
Remarque : |
---|
Pour pouvoir générer et exécuter cet exemple, .NET Framework version 3.5 doit avoir été préalablement installé. Visual Studio 2008 est nécessaire pour l'ouverture des fichiers solution et projet. |
L'exemple utilise la classe SyndicationFeed. Toutefois, les modèles présentés dans cet exemple peuvent être utilisés avec toutes les classes de syndication qui prennent en charge les données d'extension :
SyndicationFeed
SyndicationItem
Exemple XML
Pour référence, le document XML suivant est utilisé dans cet exemple.
<?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>
Ce document contient les données d'extension suivantes :
- Attribut
myAttribute
de l'élément<feed>
. - Élément
<simpleString>
. - Élément
<DataContractExtension>
. - Élément
<XmlSerializerExtension>
. - Élément
<xElementExtension>
.
Écriture des données d'extension
Les extensions d'attribut sont créées en ajoutant des entrées à la collection AttributeExtensions, comme l'illustre l'exemple de code suivant.
//Attribute extensions are stored in a dictionary indexed by
// XmlQualifiedName
feed.AttributeExtensions.Add(new XmlQualifiedName("myAttribute", ""), "someValue");
Les extensions d'élément sont créées en ajoutant des entrées à la collection ElementExtensions. Ces extensions peuvent être des valeurs de base telles que des chaînes, des sérialisations XML d'objets .NET Framework ou des nœuds XML codés manuellement.
L'exemple de code suivant crée un élément d'extension appelé simpleString
.
feed.ElementExtensions.Add("simpleString", "", "hello, world!");
L'espace de noms XML pour cet élément est l'espace de noms vide ("") et sa valeur est un nœud de texte qui contient la chaîne "hello, world!".
L'une des méthodes permettant de créer des extensions d'élément complexes composées de nombreux éléments imbriqués consiste à utiliser les API .NET Framework pour la sérialisation (DataContractSerializer et XmlSerializer sont tous deux pris en charge), comme illustré dans les exemples suivants.
feed.ElementExtensions.Add( new DataContractExtension() { Key = "X", Value = 4 } );
feed.ElementExtensions.Add( new XmlSerializerExtension { Key = "Y", Value = 8 }, new XmlSerializer( typeof( XmlSerializerExtension ) ) );
Dans cet exemple, DataContractExtension
et XmlSerializerExtension
sont des types personnalisés écrits pour être utilisés avec un sérialiseur.
La classe SyndicationElementExtensionCollection permet également de créer des extensions d'élément à partir d'une instance XmlReader. Cela permet une intégration aisée avec les API de traitement XML telles que XElement, comme l'illustre l'exemple de code suivant.
feed.ElementExtensions.Add(new XElement("xElementExtension",
new XElement("Key", new XAttribute("attr1", "someValue"), "Z"),
new XElement("Value", new XAttribute("attr1", "someValue"),
"15")).CreateReader());
Lecture des données d'extension
Les valeurs des extensions d'attribut peuvent être obtenues en recherchant l'attribut dans la collection AttributeExtensions en fonction de son XmlQualifiedName, comme l'illustre l'exemple de code suivant.
Console.WriteLine( feed.AttributeExtensions[ new XmlQualifiedName( "myAttribute", "" )]);
Les extensions d'élément sont accessibles à l'aide de la méthode 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());
}
Il est également possible d'obtenir un XmlReader au niveau de chaque extension d'élément en utilisant la méthode GetReader.
foreach (SyndicationElementExtension extension in feed2.ElementExtensions.Where<SyndicationElementExtension>(x => x.OuterName == "xElementExtension"))
{
XNode xelement = XElement.ReadFrom(extension.GetReader());
Console.WriteLine(xelement.ToString());
}
Pour configurer, générer et exécuter l'exemple
Assurez-vous d'avoir effectué la procédure indiquée dans la section Procédure d'installation unique pour les exemples Windows Communication Foundation.
Pour générer l'édition C# ou Visual Basic .NET de la solution, suivez les instructions indiquées dans Génération des exemples Windows Communication Foundation.
Pour exécuter l'exemple dans une configuration à un ou plusieurs ordinateurs, suivez les instructions indiquées dans Exécution des exemples Windows Communication Foundation.
Voir aussi
Tâches
Strongly-Typed Extensions, exemple
Autres ressources
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.