2010-10-29 16 views
5

Come è possibile creare una voce Atom con C# e .NET 4?Immissione dell'atomo con C#

ho bisogno di fare una voce con questa struttura:

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

ho provato a farlo con classe SyndicationItem ma l'ingresso contiene più informazioni di cui ho bisogno:

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()); 

e il risultato è:

<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> 

Come posso creare l'oggetto ingresso atomo senza, e type = "*" per far sembrare esattamente I volere?

Potete aiutarmi a semplificare il codice?

Grazie!

risposta

1

Perché farlo da soli?

utilizzare il costruito nelle caratteristiche in .Net:

O il toolkit Argotic Syndication:

Modifica

Spiacente, ho perso la parte in cui si utilizza l'elemento di syndication. Comunque qui c'è del testo dalla specifica ATOM (RFC4287 Sezione 4.1.2):

  • atomo: elementi di ingresso DEVE contenere esattamente un atomo: ID elemento
  • atomo: elementi di ingresso DEVE contengono esattamente un atomo: elemento aggiornato

In altre parole: Spezzerai lo standard se togli quegli articoli.

+0

Questo è esattamente quello che sto cercando di fare, io uso l'oggetto syndicationitem, ma non riesco a farlo per creare la voce che voglio, ma grazie per l'argotico lo proverò. Ma è meglio usare syndicationitem perché è già nel framework. –

+0

Ho letto male la tua domanda, la mia risposta è stata aggiornata. – jgauffin

+0

Grazie per il vostro aiuto! –

2

Secondo lo schema XML:

essere sicuri che se si specifica un valore per l'attributo solo i minOccurs, è inferiore o uguale al valore di default di maxOccurs, cioè è 0 o 1. Allo stesso modo , se si specifica un valore solo per l'attributo maxOccurs, deve essere maggiore o uguale al valore predefinito di minOccurs, ovvero 1 o più. Se entrambi gli attributi sono omessi, l'elemento deve apparire esattamente una volta.

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

id è atom:textType .Qui è frammento di schema per 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> 

Quindi, come si può vedere, id e gli elementi aggiornati sono obbligatori ed è illegale omettere loro.

D'altra parte, digitare è facoltativo poiché il valore predefinito per Use è facoltativo. Ma non conosco un modo per nasconderlo.

+0

Ok, sembra che SyndicationItem generi l'immissione dell'atomo giusto. Grazie! E come posso semplificare il codice e rimuovere i campi e ? –

+0

Ho un aggiornamento. Scusa se ho sbagliato, l'attributo era facoltativo. – Aliostad

+0

Potrebbe esserci un'opzione per SyndicationItem per rimuoverlo? –