Запись атома с C#
Как я могу сделать запись 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 ответа
Зачем это делать самому?
Либо используйте встроенные функции в.Net:
Или инструментарий Argotic Syndication:
редактировать
Извините, пропустил ту часть, где вы используете синдикацию. В любом случае вот текст из спецификации ATOM (RFC4287, раздел 4.1.2):
- Элементы atom: entry ДОЛЖНЫ содержать ровно один элемент atom: id
- Элементы atom: entry ДОЛЖНЫ содержать ровно один элемент atom: updated
Другими словами: вы нарушите стандарт, если уберете эти предметы.
Согласно схеме 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 и обновленные элементы являются обязательными, и их нельзя опускать.
С другой стороны, тип является необязательным, поскольку значение по умолчанию для Use
не является обязательным. Но я не знаю, как это скрыть.