Запись атома с C # - PullRequest
       46

Запись атома с C #

5 голосов
/ 29 октября 2010

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

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

<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 = "*", чтобы он выглядел именно так, как я хочу?

Можете ли вы помочь мне упростить код?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 29 октября 2010

Согласно схеме 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>

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

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

1 голос
/ 29 октября 2010

Зачем делать это самостоятельно?

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

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

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

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

  • atom: entry элементы MUST содержат ровно один атом: id element
  • atom: entry элементы ДОЛЖНЫ содержать ровно один атом: обновленный элемент

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

...