5

如何使用 C# 和 .NET 4 创建 Atom 条目?

我需要用这个结构做一个条目:

<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="*" 的情况下创建原子条目对象以使其看起来完全符合我的要求?

你能帮我简化代码吗?

谢谢!

4

2 回答 2

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

idatom: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 和 updated 元素是强制性的,省略它们是非法的

另一方面,类型是可选的,因为 的默认值Use是可选的。但我不知道如何隐藏它。

于 2010-10-29T14:21:21.083 回答
1

为什么要自己做?

要么使用 .Net 中的内置功能:

或者 Argotic Syndication 工具包:

编辑

抱歉,错过了您使用联合项目的部分。无论如何,这里有一些来自 ATOM 规范的文本(RFC4287 第 4.1.2 节):

  • atom:entry 元素必须只包含一个 atom:id 元素
  • atom:entry 元素必须只包含一个 atom:updated 元素

换句话说:如果您删除这些项目,您将违反标准。

于 2010-10-29T18:33:43.007 回答