我需要在HTML字符串中查找元素。不幸的是,HTML几乎是残缺不全的(例如没有开放标签就有闭合标签)。
我试图使用 launchpad.net/xmlpath 的XPath,但它无法解析HTML文件,所以非常不稳定。
如何在golang中查找破损的HTML元素?我倾向于使用XPath,但如果我可以用它来查找具有特定id或类的标记,我也可以考虑其他解决方案。
看起来 net/html 可以胜任此任务。
那么现在我正在进行的就是:
package main
import (
"strings"
"golang.org/x/net/html"
"log"
"bytes"
"gopkg.in/xmlpath.v2"
)
func main() {
brokenHtml := `<!DOCTYPE html><html><body><h1 id="someid">My First Heading</h1><p>paragraph</body></html>`
reader := strings.NewReader(brokenHtml)
root, err := html.Parse(reader)
if err != nil {
log.Fatal(err)
}
var b bytes.Buffer
html.Render(&b, root)
fixedHtml := b.String()
reader = strings.NewReader(fixedHtml)
xmlroot, xmlerr := xmlpath.ParseHTML(reader)
if xmlerr != nil {
log.Fatal(xmlerr)
}
var xpath string
xpath = `//h1[@id='someid']`
path := xmlpath.MustCompile(xpath)
if value, ok := path.String(xmlroot); ok {
log.Println("Found:", value)
}
}