MCPcopy
hub / github.com/mmcdole/gofeed / parseRoot

Method parseRoot

rss/parser.go:28–115  ·  view source on GitHub ↗
(p *xpp.XMLPullParser)

Source from the content-addressed store, hash-verified

26}
27
28func (rp *Parser) parseRoot(p *xpp.XMLPullParser) (*Feed, error) {
29 rssErr := p.Expect(xpp.StartTag, "rss")
30 rdfErr := p.Expect(xpp.StartTag, "rdf")
31 if rssErr != nil && rdfErr != nil {
32 return nil, fmt.Errorf("%s or %s", rssErr.Error(), rdfErr.Error())
33 }
34
35 // Items found in feed root
36 var channel *Feed
37 var textinput *TextInput
38 var image *Image
39 items := []*Item{}
40
41 ver := rp.parseVersion(p)
42
43 for {
44 tok, err := shared.NextTag(p)
45 if err != nil {
46 return nil, err
47 }
48
49 if tok == xpp.EndTag {
50 break
51 }
52
53 if tok == xpp.StartTag {
54
55 // Skip any extensions found in the feed root.
56 if shared.IsExtension(p) {
57 p.Skip()
58 continue
59 }
60
61 name := strings.ToLower(p.Name)
62
63 if name == "channel" {
64 channel, err = rp.parseChannel(p)
65 if err != nil {
66 return nil, err
67 }
68 } else if name == "item" {
69 item, err := rp.parseItem(p)
70 if err != nil {
71 return nil, err
72 }
73 items = append(items, item)
74 } else if name == "textinput" {
75 textinput, err = rp.parseTextInput(p)
76 if err != nil {
77 return nil, err
78 }
79 } else if name == "image" {
80 image, err = rp.parseImage(p)
81 if err != nil {
82 return nil, err
83 }
84 } else {
85 p.Skip()

Callers 1

ParseMethod · 0.95

Calls 8

parseVersionMethod · 0.95
parseChannelMethod · 0.95
parseItemMethod · 0.95
parseTextInputMethod · 0.95
parseImageMethod · 0.95
NextTagFunction · 0.92
IsExtensionFunction · 0.92
ErrorMethod · 0.80

Tested by

no test coverage detected