Advertisement
Guest User

Untitled

a guest
Sep 24th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. // goparsing project main.go
  2. package main
  3.  
  4. import (
  5. "fmt"
  6. "html"
  7. "log"
  8. "bytes"
  9. "io"
  10. "io/ioutil"
  11. "os"
  12. "strings"
  13. )
  14.  
  15. func dumpLevel(w io.Writer, n *html.Node, level int) os.Error {
  16. io.WriteString(w, "| ")
  17. for i := 0; i < level; i++ {
  18. io.WriteString(w, " ")
  19. }
  20. switch n.Type {
  21. case html.ErrorNode:
  22. return os.NewError("unexpected ErrorNode")
  23. case html.DocumentNode:
  24. return os.NewError("unexpected DocumentNode")
  25. case html.ElementNode:
  26. fmt.Fprintf(w, "<%s>", html.EscapeString(n.Data))
  27. case html.TextNode:
  28. fmt.Fprintf(w, "%q", html.EscapeString(n.Data))
  29. case html.CommentNode:
  30. return os.NewError("COMMENT")
  31. default:
  32. return os.NewError("unknown node type")
  33. }
  34. io.WriteString(w, "\n")
  35. for _, c := range n.Child {
  36. if err := dumpLevel(w, c, level+1); err != nil {
  37. return err
  38. }
  39. }
  40. return nil
  41. }
  42.  
  43. func dump(n *html.Node) (string, os.Error) {
  44. if n == nil || len(n.Child) == 0 {
  45. return "", nil
  46. }
  47. b := bytes.NewBuffer(nil)
  48. for _, child := range n.Child {
  49. if err := dumpLevel(b, child, 0); err != nil {
  50. return "", err
  51. }
  52. }
  53. return b.String(), nil
  54. }
  55.  
  56. func main() {
  57. b, err := ioutil.ReadFile("/home/rmib/Develop/13691")
  58. if err != nil {
  59. log.Fatal(err)
  60. }
  61. text := string(b)
  62. doc, err := html.Parse(strings.NewReader(text))
  63. if err != nil {
  64. log.Fatal(err)
  65. }
  66. actual, err := dump(doc)
  67. if err != nil {
  68. log.Fatal(err)
  69. }
  70. log.Println(actual)
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement