2010-10-29 2 views
5

Как я могу сделать запись Atom с C# и .NET 4?Запись атома с C#

мне нужно сделать запись с этой структурой:

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

Я пытался сделать это с классом SyndicationItem но запись содержит больше информации, чем мне нужно:

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

И результат:

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

Как я могу создать объект ввода атома без, и type = "*", чтобы он выглядел точно? хотеть?

Помогите мне упростить код?

Спасибо!

ответ

1

Зачем это нужно?

Либо использовать встроенные функции в .Net:

или Argotic Syndication инструментарий:

Редактировать

Извините, пропустил ту часть, где вы используете пункт синдикации. В любом случае, вот какой-то текст из спецификации ATOM (RFC4287, раздел 4.1.2):

  • атом: входные элементы MUST содержит ровно один атом: идентификатор элемента
  • атом: входные элементы MUST содержит ровно один атом: обновленный элемент

Другими словами: Если вы удалите эти элементы, вы нарушите стандарт.

+0

Это именно то, что я пытаюсь сделать, я использую объект syndicationitem, но я не могу заставить его создать запись, которую хочу, но спасибо за argotic. Я попробую. Но лучше использовать syndicationitem, потому что он уже находится в рамках. –

+0

Я неправильно понял ваш вопрос, мой ответ обновлен. – jgauffin

+0

Спасибо за помощь! –

2

Согласно XML-схема:

Будьте уверены, что если вы зададите значение для атрибута только MinOccurs, оно меньше или равно значению по умолчанию MaxOccurs, т.е. 0 или 1. Аналогично , если вы укажете значение только для атрибута maxOccurs, оно должно быть больше или равно значению по умолчанию minOccurs, т.е. 1 или более. Если оба атрибута опущены, элемент должен отображаться ровно один раз.

    <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 .Здесь является фрагмент схемы для 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> 

Так как вы можете видеть, идентификатор и обновленные элементы являются обязательными и является незаконным их опускаем.

С другой стороны, тип является необязательным, поскольку значение по умолчанию для Use не является обязательным. Но я не знаю, как скрыть это.

+0

Хорошо, кажется, что SyndicationItem генерирует запись с правом атома. Благодаря! И как я могу упростить код и удалить поля и ? –

+0

У меня есть обновление. Извините, я был неправ, этот атрибут был необязательным. – Aliostad

+0

Может быть, есть возможность для SyndicationItem удалить его? –