我發(fā)現(xiàn)它html.NewTokenizer()不會自動修復(fù)某些問題。因此,您可能會得到一個雜亂的結(jié)束標(biāo)記 ( html.EndTagToken)。<div></p></div>也會這樣html.StartTagToken, html.EndTagToken, html.EndTagToken。是否有推薦的解決方案來處理忽略/刪除/修復(fù)這些標(biāo)簽?我的第一個猜測是[]atom.Atom在開始/結(jié)束每個標(biāo)簽時手動保留一個切片并推送/彈出到列表(在比較標(biāo)簽以確保您沒有得到意外的結(jié)束標(biāo)簽之后)。下面是一些代碼來演示這個問題:var err errorhtm := `<div><div><p></p></p></div>`tokenizer := html.NewTokenizer(strings.NewReader(htm))for { if tokenizer.Next() == html.ErrorToken { err = tokenizer.Err() if err == io.EOF { err = nil } return } token := tokenizer.Token() switch token.Type { case html.DoctypeToken: continue case html.CommentToken: continue case html.SelfClosingTagToken: fmt.Println(token.Data) continue case html.StartTagToken: fmt.Printf("<%s>\n", token.Data) case html.EndTagToken: fmt.Printf("</%s>\n", token.Data) case html.TextToken: continue default: continue }}輸出:<div><div><p></p></p></div>
1 回答

撒科打諢
TA貢獻(xiàn)1934條經(jīng)驗 獲得超2個贊
net/html
FWIW,當(dāng)你使用它的方法時,似乎可以解決這些問題Parse
。
package main
import (
? ? "bytes"
? ? "fmt"
? ? "log"
? ? "strings"
? ? "golang.org/x/net/html"
)
func main() {
? ? brokenHtml := `<div><div><p></p></p></div>`
? ? 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()
? ? fmt.Println(fixedHtml)
}
- 1 回答
- 0 關(guān)注
- 151 瀏覽
添加回答
舉報
0/150
提交
取消