为了账号安全,请及时绑定邮箱和手机立即绑定

Go GCP Cloud PubSub 不批量发布消息

Go GCP Cloud PubSub 不批量发布消息

Go
慕娘9325324 2023-06-05 18:16:10
我发现它html.NewTokenizer()不会自动修复某些问题。因此,您可能会得到一个杂乱的结束标记 ( html.EndTagToken)。<div></p></div>也会这样html.StartTagToken, html.EndTagToken, html.EndTagToken。是否有推荐的解决方案来处理忽略/删除/修复这些标签?我的第一个猜测是[]atom.Atom在开始/结束每个标签时手动保留一个切片并推送/弹出到列表(在比较标签以确保您没有得到意外的结束标签之后)。下面是一些代码来演示这个问题: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贡献1934条经验 获得超2个赞

net/htmlFWIW,当你使用它的方法时,似乎可以解决这些问题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)

}


查看完整回答
反对 回复 2023-06-05
  • 1 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信