2010-10-29 23 views
5

¿Cómo puedo hacer una entrada de Atom con C# y .NET 4?Entrada de átomo con C#

Necesito hacer una entrada con esta estructura:

<entry xmlns="http://www.w3.org/2005/Atom" xmlns:f="XXX:aaa"> 
    <title>title1</title> 
    <summary>summary1</summary> 
</entry> 

Traté de hacer esto con la clase SyndicationItem pero la entrada contiene más información de lo que necesito:

SyndicationItem atom = new SyndicationItem(); 
atom.Title = new TextSyndicationContent("test1", TextSyndicationContentKind.Plaintext); 

atom.Summary = new TextSyndicationContent("summary1"); 
atom.AttributeExtensions.Add(new XmlQualifiedName("f", "http://www.w3.org/2000/xmlns/"), "XXX:aaa"); 


XmlWriterSettings settings = new XmlWriterSettings(); 
settings.Indent = true; 
settings.IndentChars = " "; 
settings.NewLineOnAttributes = true; 
StringBuilder sb = new StringBuilder(); 
XmlWriter xml = XmlWriter.Create(sb,settings); 
atom.SaveAsAtom10(xml); 
xml.Close(); 
Console.WriteLine(sb.ToString()); 

Y el resultado es:

<entry xmlns:f="XXX:aaa" xmlns="http://www.w3.org/2005/Atom"> 
    <id>uuid:34381971-9feb-4444-9e6a-3fbc412ac6d2;id=1</id> 
    <title type="text">title1</title> 
    <summary type="text">summary1</summary> 
    <updated>2010-10-29T14:02:48Z</updated> 
</entry> 

¿Cómo puedo crear objeto de entrada átomo sin, y escriba = "*" para que se vea exactamente I ¿desear?

¿Me puede ayudar a simplificar el código?

Gracias!

Respuesta

1

¿Por qué hacerlo usted mismo?

utilizar el construido en características en .Net:

O el kit de herramientas Argotic Sindicación:

Editar

Disculpa, falló la parte donde usa el ítem de sindicación. De todos modos aquí hay un texto de la especificación ATOM (RFC4287 Sección 4.1.2):

  • átomo de: elementos de entrada DEBE contener exactamente un átomo de: ID de elemento
  • átomo de: elementos de entrada DEBE contener exactamente un átomo: elemento actualizado

En otras palabras: Romperás el estándar si eliminas esos artículos.

+0

Esto es exactamente lo que trato de hacer, utilizo el objeto syndicationitem, pero no puedo crear la entrada que quiero, pero gracias por argótico lo intentaré. Pero es mejor usar el elemento de sindicación porque ya está en el marco. –

+0

Leí mal su pregunta, mi respuesta está actualizada. – jgauffin

+0

¡Gracias por tu ayuda! –

2

Según el esquema XML:

estar seguro que si se especifica un valor para el atributo sólo los minOcurrencias, es menor o igual al valor por defecto de maxOcurrencias, es decir, es 0 ó 1. De manera similar , si especifica un valor solo para el atributo maxOccurs, debe ser mayor o igual que el valor predeterminado de minOccurs, es decir, 1 o más. Si se omiten ambos atributos, el elemento debe aparecer exactamente una vez.

    <xs:element name="id" type="atom:idType" minOccurs="1" maxOccurs="1" /> 
        <xs:element name="updated" type="atom:dateTimeType" minOccurs="1" maxOccurs="1" /> 

id es atom:textType .Aquí es fragmento del esquema para textType:

<xs:complexType name="textType" mixed="true"> 
    <xs:annotation> 
     <xs:documentation> 
      The Atom text construct is defined in section 3.1 of the format spec. 
     </xs:documentation> 
    </xs:annotation> 
    <xs:sequence> 
     <xs:any namespace="http://www.w3.org/1999/xhtml" minOccurs="0"/> 
    </xs:sequence> 
    <xs:attribute name="type" > 
     <xs:simpleType> 
      <xs:restriction base="xs:token"> 
       <xs:enumeration value="text"/> 
       <xs:enumeration value="html"/> 
       <xs:enumeration value="xhtml"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute> 
    <xs:attributeGroup ref="atom:commonAttributes"/> 
</xs:complexType> 

Así como se puede ver, Identificación y elementos actualizados son obligatorios y es ilegal omitirlos.

Por otro lado, el tipo es opcional ya que el valor predeterminado para Use es opcional. Pero no sé una manera de ocultarlo.

+0

Ok, parece que SyndicationItem genera entrada de átomo a la derecha. ¡Gracias! ¿Y cómo puedo simplificar el código y eliminar los campos y ? –

+0

Tengo una actualización. Lo siento, estaba equivocado, el atributo era opcional. – Aliostad

+0

¿Puede haber una opción para que SyndicationItem lo elimine? –

Cuestiones relacionadas