Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El modelo de objetos de sindicación proporciona compatibilidad enriquecida para trabajar con datos de extensión (información que está presente en una representación XML de una fuente de sindicación pero no explícitamente expuesta por clases como SyndicationFeed y SyndicationItem. Este ejemplo muestra las técnicas básicas para trabajar con datos de extensión.
El ejemplo utiliza la clase SyndicationFeed para el ejemplo. Sin embargo, los modelos mostrados en este ejemplo se pueden utilizar con todas las clases de distribución que admiten los datos de la extensión:
SyndicationFeed
SyndicationItem
XML de ejemplo
Como referencia, el siguiente documento XML se usa en este ejemplo:
<?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>
Este documento contiene las siguientes partes de datos de extensión:
Atributo
myAttribute
del elemento<feed>
.Elemento
<simpleString>
.Elemento
<DataContractExtension>
.Elemento
<XmlSerializerExtension>
.Elemento
<xElementExtension>
.
Cómo escribir datos de extensión
Las extensiones de atributo se crean agregando entradas a la colección AttributeExtensions tal y como se muestra en el código de ejemplo siguiente.
//Attribute extensions are stored in a dictionary indexed by
// XmlQualifiedName
feed.AttributeExtensions.Add(new XmlQualifiedName("myAttribute", ""), "someValue");
Las extensiones de elemento se crean agregando entradas a la colección ElementExtensions. Estas extensiones pueden ser valores básicos como cadenas, serializaciones XML de objetos .NET Framework o nodos XML codificados a mano.
El código de ejemplo siguiente crea un elemento de extensión denominado simpleString
.
feed.ElementExtensions.Add("simpleString", "", "hello, world!");
El espacio de nombres XML para este elemento es el espacio de nombres vacío (“”) y su valor es un nodo de texto que contiene la cadena “hello, world!”.
Una manera de crear extensiones de elemento complejas que consten de muchos elementos anidados es utilizar las API de .NET Framework para la serialización (se admiten DataContractSerializer y XmlSerializer) tal como se muestra en los ejemplos siguientes.
feed.ElementExtensions.Add( new DataContractExtension() { Key = "X", Value = 4 } );
feed.ElementExtensions.Add( new XmlSerializerExtension { Key = "Y", Value = 8 }, new XmlSerializer( typeof( XmlSerializerExtension ) ) );
En este ejemplo, DataContractExtension
y XmlSerializerExtension
son tipos personalizados escritos para su uso con un serializador.
La clase SyndicationElementExtensionCollection también se puede utilizar para crear extensiones de elemento a partir de una instancia XmlReader. Esto permite la fácil integración con las API de procesamiento de XML como XElement tal y como se muestra en el código de ejemplo siguiente.
feed.ElementExtensions.Add(new XElement("xElementExtension",
new XElement("Key", new XAttribute("attr1", "someValue"), "Z"),
new XElement("Value", new XAttribute("attr1", "someValue"),
"15")).CreateReader());
Lectura de datos de la extensión
Los valores para las extensiones de atributo se pueden obtener buscando el atributo en la colección AttributeExtensions por su XmlQualifiedName tal y como se muestra en el código de ejemplo siguiente.
Console.WriteLine( feed.AttributeExtensions[ new XmlQualifiedName( "myAttribute", "" )]);
Se tiene acceso a las extensiones de elemento utilizando el método 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());
}
También es posible obtener un XmlReader en las extensiones de elemento individuales utilizando el método GetReader.
foreach (SyndicationElementExtension extension in feed2.ElementExtensions.Where<SyndicationElementExtension>(x => x.OuterName == "xElementExtension"))
{
XNode xelement = XElement.ReadFrom(extension.GetReader());
Console.WriteLine(xelement.ToString());
}
Para configurar, compilar y ejecutar el ejemplo
Asegúrese de realizar los Procedimiento de instalación única para los ejemplos de Windows Communication Foundation.
Para compilar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Compilación de los ejemplos de Windows Communication Foundation.
Para ejecutar el ejemplo en una configuración con un único equipo o con varios, siga las instrucciones de Running the Windows Communication Foundation Samples.
![]() |
---|
Puede que los ejemplos ya estén instalados en su equipo. Compruebe el siguiente directorio (valor predeterminado) antes de continuar.
<InstallDrive>:\WF_WCF_Samples
Si no existe este directorio, vaya a la página de ejemplos de Windows Communication Foundation (WCF) y Windows Workflow Foundation (WF) Samples para .NET Framework 4 para descargar todos los ejemplos de WF y Windows Communication Foundation (WCF). Este ejemplo se encuentra en el siguiente directorio.
<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Syndication\LooselyTypedExtensions
|
Vea también
Tareas
Ejemplo de extensiones con establecimiento inflexible de tipos