2010-10-29 9 views
5

Làm cách nào để tạo một mục nhập Atom bằng C# và .NET 4?Nhập Atom với C#

tôi cần phải thực hiện một mục với cấu trúc này:

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

Tôi cố gắng để làm điều này với lớp SyndicationItem nhưng entry chứa thông tin nhiều hơn tôi cần:

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

Và kết quả là:

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

Làm cách nào để tạo đối tượng nhập nguyên tử mà không có và gõ = "*" để làm cho nó trông chính xác muốn?

Bạn có thể giúp tôi đơn giản hóa mã không?

Cảm ơn!

Trả lời

1

Tại sao tự làm điều đó?

Hoặc sử dụng được xây dựng trong các tính năng trong Net:

Hoặc bộ công cụ Argotic Syndication:

Chỉnh sửa

Rất tiếc, đã bỏ lỡ phần bạn sử dụng mục phân phối. Dù sao ở đây là một số văn bản từ đặc tả ATOM (RFC4287 Mục 4.1.2):

  • nguyên tử: các yếu tố nhập PHẢI chứa chính xác một nguyên tử: element id
  • nguyên tử: các yếu tố nhập PHẢI chứa chính xác một nguyên tử: cập nhật phần

Nói cách khác: Bạn sẽ phá vỡ tiêu chuẩn nếu bạn xóa các mục đó.

+0

Đây chính xác là những gì tôi đang cố gắng để làm, tôi sử dụng đối tượng syndicationitem, nhưng tôi không thể làm cho nó để tạo ra các mục tôi muốn, nhưng cảm ơn cho argotic tôi sẽ cố gắng đó. Nhưng tốt hơn là sử dụng syndicationitem vì nó đã có sẵn trong khung công tác. –

+0

Tôi đã đọc sai câu hỏi của bạn, câu trả lời của tôi được cập nhật. – jgauffin

+0

Cảm ơn sự giúp đỡ của bạn! –

2

Theo lược đồ XML:

Hãy chắc chắn rằng nếu bạn chỉ định một giá trị cho thuộc tính chỉ minOccurs, nó là nhỏ hơn hoặc bằng giá trị mặc định của maxOccurs, tức là nó là 0 hoặc 1. Tương tự , nếu bạn chỉ định giá trị cho thuộc tính maxOccurs, nó phải lớn hơn hoặc bằng giá trị mặc định của minOccurs, nghĩa là 1 hoặc nhiều hơn. Nếu cả hai thuộc tính bị bỏ qua, phần tử phải xuất hiện chính xác một lần.

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

idatom:textType .Here là đoạn schema cho 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> 

Như bạn có thể thấy, id và các yếu tố được cập nhật là bắt buộc và là bất hợp pháp để bỏ qua chúng.

Mặt khác, nhập là tùy chọn vì giá trị mặc định cho Use là tùy chọn. Nhưng tôi không biết cách nào để che giấu nó.

+0

Ok, có vẻ như SyndicationItem tạo ra mục nhập nguyên tử đúng. Cảm ơn! Và làm cách nào để tôi có thể đơn giản hóa mã và xóa các trường ? –

+0

Tôi đã cập nhật. Xin lỗi tôi đã sai, thuộc tính là tùy chọn. – Aliostad

+0

Có thể có tùy chọn cho SyndicationItem để xóa nó không? –