mirror of
https://github.com/go-i2p/newsgo.git
synced 2025-06-08 10:31:53 -04:00
feed.go
This commit is contained in:
10
.gitignore
vendored
10
.gitignore
vendored
@ -1,4 +1,6 @@
|
|||||||
newsgo
|
/newsgo
|
||||||
onionkeys
|
/onionkeys
|
||||||
i2pkeys
|
/i2pkeys
|
||||||
build
|
/tlskeys
|
||||||
|
/build
|
||||||
|
/data
|
||||||
|
@ -1 +1,14 @@
|
|||||||
package newsbuilder
|
package newsbuilder
|
||||||
|
|
||||||
|
import (
|
||||||
|
newsfeed "i2pgit.org/idk/newsgo/builder/feed"
|
||||||
|
)
|
||||||
|
|
||||||
|
type NewsBuilder struct {
|
||||||
|
Nodes []newsfeed.Node
|
||||||
|
File string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *NewsBuilder) LoadFeed() {
|
||||||
|
n.Nodes = newsfeed.XMLData(n.File)
|
||||||
|
}
|
||||||
|
45
builder/feed/feed.go
Normal file
45
builder/feed/feed.go
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package newsfeed
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/xml"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Node struct {
|
||||||
|
XMLName xml.Name
|
||||||
|
Attrs []xml.Attr `xml:",any,attr"`
|
||||||
|
Content []byte `xml:",innerxml"`
|
||||||
|
Nodes []Node `xml:",any"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *Node) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
|
||||||
|
n.Attrs = start.Attr
|
||||||
|
type node Node
|
||||||
|
|
||||||
|
return d.DecodeElement((*node)(n), &start)
|
||||||
|
}
|
||||||
|
|
||||||
|
func XMLData(data []byte) (m []Node) {
|
||||||
|
buf := bytes.NewBuffer(data)
|
||||||
|
dec := xml.NewDecoder(buf)
|
||||||
|
|
||||||
|
var n Node
|
||||||
|
err := dec.Decode(&n)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
walk([]Node{n}, func(n Node) bool {
|
||||||
|
m = append(m, n)
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func walk(nodes []Node, f func(Node) bool) {
|
||||||
|
for _, n := range nodes {
|
||||||
|
if f(n) {
|
||||||
|
walk(n.Nodes, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user