Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’exemple LooselyTypedExtensions illustre les techniques de base pour l’utilisation des données d’extension.
Le modèle objet syndication fournit une prise en charge enrichie de l’utilisation des données d’extension , informations présentes dans la représentation XML d’un flux de syndication, mais pas explicitement exposées par des classes telles que SyndicationFeed et SyndicationItem.
L’exemple utilise la SyndicationFeed classe à des fins d’exemple. Toutefois, les modèles présentés dans cet exemple peuvent être utilisés avec toutes les classes syndication qui prennent en charge les données d’extension :
Exemple de code 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 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>
Ce document contient les données d'extension suivantes :
Attribut
myAttributede l’élément<feed>.<simpleString>élément.<DataContractExtension>élément.<XmlSerializerExtension>élément.<xElementExtension>élément.
Écriture de données d’extension
Les extensions d’attribut sont créées en ajoutant des entrées à la AttributeExtensions collection, comme indiqué dans 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 ElementExtensions collection. 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 nommé simpleString.
feed.ElementExtensions.Add("simpleString", "", "hello, world!");
L’espace de noms XML de 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 façons de créer des extensions d'éléments complexes composées de nombreux éléments imbriqués est d'utiliser les API .NET Framework pour la sérialisation (les deux DataContractSerializer et XmlSerializer formats sont pris en charge), comme le montrent 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, les types personnalisés DataContractExtension et XmlSerializerExtension sont conçus pour être utilisés avec un sérialiseur.
La SyndicationElementExtensionCollection classe peut également être utilisée pour créer des extensions d’élément à partir d’une XmlReader instance. Cela permet une intégration facile aux API de traitement XML, comme XElement illustré dans 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 ReadElementExtensions<T> méthode.
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 d’installation unique pour les exemples Windows Communication Foundation.
Pour générer l’édition C# ou Visual Basic .NET de la solution, conformez-vous aux instructions figurant dans Building the Windows Communication Foundation Samples.
Pour exécuter l’exemple dans une configuration à un ou plusieurs ordinateurs, conformez-vous aux instructions figurant dans la rubrique Exécution des exemples Windows Communication Foundation.