Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // goparsing project main.go
- package main
- import (
- "fmt"
- "html"
- "log"
- "bytes"
- "io"
- "io/ioutil"
- "os"
- "strings"
- )
- func dumpLevel(w io.Writer, n *html.Node, level int) os.Error {
- io.WriteString(w, "| ")
- for i := 0; i < level; i++ {
- io.WriteString(w, " ")
- }
- switch n.Type {
- case html.ErrorNode:
- return os.NewError("unexpected ErrorNode")
- case html.DocumentNode:
- return os.NewError("unexpected DocumentNode")
- case html.ElementNode:
- fmt.Fprintf(w, "<%s>", html.EscapeString(n.Data))
- case html.TextNode:
- fmt.Fprintf(w, "%q", html.EscapeString(n.Data))
- case html.CommentNode:
- return os.NewError("COMMENT")
- default:
- return os.NewError("unknown node type")
- }
- io.WriteString(w, "\n")
- for _, c := range n.Child {
- if err := dumpLevel(w, c, level+1); err != nil {
- return err
- }
- }
- return nil
- }
- func dump(n *html.Node) (string, os.Error) {
- if n == nil || len(n.Child) == 0 {
- return "", nil
- }
- b := bytes.NewBuffer(nil)
- for _, child := range n.Child {
- if err := dumpLevel(b, child, 0); err != nil {
- return "", err
- }
- }
- return b.String(), nil
- }
- func main() {
- b, err := ioutil.ReadFile("/home/rmib/Develop/13691")
- if err != nil {
- log.Fatal(err)
- }
- text := string(b)
- doc, err := html.Parse(strings.NewReader(text))
- if err != nil {
- log.Fatal(err)
- }
- actual, err := dump(doc)
- if err != nil {
- log.Fatal(err)
- }
- log.Println(actual)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement