func ExampleParse() { s := `<p>Links:</p><ul><li><a href="foo">Foo</a><li><a href="/bar/baz">BarBaz</a></ul>` doc, err := html.Parse(strings.NewReader(s)) if err != nil { log.Fatal(err) } var f func(*html.Node) f = func(n *html.Node) { if n.Type == html.ElementNode && n.Data == "a" { for _, a := range n.Attr { if a.Key == "href" { fmt.Println(a.Val) break } } } for c := n.FirstChild; c != nil; c = c.NextSibling { f(c) } } f(doc) // Output: // foo // /bar/baz }
// Parse the html while handling the charset func ParseHTML(r io.Reader, cs string) (*html.Node, error) { var err error if cs == "" { // attempt to guess the charset of the HTML document r, err = charset.NewReader(r, "") if err != nil { return nil, err } } else { // let the user specify the charset e, name := charset.Lookup(cs) if name == "" { return nil, fmt.Errorf("'%s' is not a valid charset", cs) } r = transform.NewReader(r, e.NewDecoder()) } return html.Parse(r) }