Compartir a través de


Ejemplo de extensiones con establecimiento flexible de tipos

Download sample

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.

Nota

En este ejemplo, para generar y ejecutar, es necesario que esté instalado .NET Framework versión 3.5. Para abrir los archivos de solución y proyecto se necesita Visual Studio 2008.

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 sindicación que admiten datos de extensión:

SyndicationFeed

SyndicationItem

SyndicationCategory

SyndicationPerson

SyndicationLink

XML de ejemplo

Como referencia, el documento XML utilizado en este ejemplo es de la siguiente manera:

<?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 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 consisten en muchos elementos anidados es utilizar las API de .NET Framework para la serialización (se admiten DataContractSerializer y XmlSerializer ).

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, generar y ejecutar el ejemplo

  1. Asegúrese de que ha realizado el Procedimiento de instalación único para ejemplos de Windows Communication Foundation.

  2. Para generar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Generación de ejemplos de Windows Communication Foundation.

  3. Para ejecutar el ejemplo en una configuración de equipos única o cruzada, siga las instrucciones de Ejecución de ejemplos de Windows Communication Foundation.

Consulte también

Otros recursos

Ejemplo de extensiones con establecimiento inflexible de tipos
WCF Syndication

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.