This post shows how to convert Atom 1.0 to RSS 2.0 . The
example Atom 1.0 feed comes from kura.io website. Note that only important
fields in RSS feed are copied to corresponding Atom equivalent.
Souce Code
Run code on Go Playground
atom2rss.go |
repository |
view raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94 package main
import (
"io/ioutil"
"encoding/xml"
"html/template"
"fmt"
)
type Rss2 struct {
XMLName xml . Name `xml:"rss"`
Version string `xml:"version,attr"`
// Required
Title string `xml:"channel>title"`
Link string `xml:"channel>link"`
Description string `xml:"channel>description"`
// Optional
PubDate string `xml:"channel>pubDate"`
ItemList [] Item `xml:"channel>item"`
}
type Item struct {
// Required
Title string `xml:"title"`
Link string `xml:"link"`
Description template . HTML `xml:"description"`
// Optional
Content template . HTML `xml:"encoded"`
PubDate string `xml:"pubDate"`
Comments string `xml:"comments"`
}
type Atom1 struct {
XMLName xml . Name `xml:"http://www.w3.org/2005/Atom feed"`
Title string `xml:"title"`
Subtitle string `xml:"subtitle"`
Id string `xml:"id"`
Updated string `xml:"updated"`
Rights string `xml:"rights"`
Link Link `xml:"link"`
Author Author `xml:"author"`
EntryList [] Entry `xml:"entry"`
}
type Link struct {
Href string `xml:"href,attr"`
}
type Author struct {
Name string `xml:"name"`
Email string `xml:"email"`
}
type Entry struct {
Title string `xml:"title"`
Summary string `xml:"summary"`
Content string `xml:"content"`
Id string `xml:"id"`
Updated string `xml:"updated"`
Link Link `xml:"link"`
Author Author `xml:"author"`
}
func atom1ToRss2 ( a Atom1 ) Rss2 {
r := Rss2 {
Title : a . Title ,
Link : a . Link . Href ,
Description : a . Subtitle ,
PubDate : a . Updated ,
}
r . ItemList = make ([] Item , len ( a . EntryList ))
for i , entry := range a . EntryList {
r . ItemList [ i ]. Title = entry . Title
r . ItemList [ i ]. Link = entry . Link . Href
if entry . Content == "" {
r . ItemList [ i ]. Description = template . HTML ( entry . Summary )
} else {
r . ItemList [ i ]. Description = template . HTML ( entry . Content )
}
}
return r
}
func main () {
a := Atom1 {}
xmlContent , _ := ioutil . ReadFile ( "example-7.xml" )
err := xml . Unmarshal ( xmlContent , & a )
if err != nil { panic ( err ) }
r := atom1ToRss2 ( a )
fmt . Println ( r )
}
Tested on: Ubuntu Linux 14.10 , Go 1.4 .
[Golang] XML Parsing Example series: