第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我需要 html.Parse() 無法解析的 HTML

我需要 html.Parse() 無法解析的 HTML

Go
嚕嚕噠 2023-07-10 16:43:45
我正在編寫一個 Go 函數(shù)來讀取 HTML 響應(yīng)正文并提取頁面標(biāo)題。總的來說,該函數(shù)工作得很好,但我想測試響應(yīng)正文根本不是正確 HTML 的代碼路徑。我為單元測試創(chuàng)建一些無效 HTML 的簡單嘗試已經(jīng)失敗。顯然,根據(jù)html.Parse文檔,這是因為:HTML5 解析算法 [...] 非常復(fù)雜。<tag>生成的樹可以包含隱式創(chuàng)建的節(jié)點,這些節(jié)點在 r 的數(shù)據(jù)中沒有顯式列出,并且節(jié)點的父節(jié)點可能與 start 和 end 的簡單處理所隱含的嵌套不同<tag>。相反,<tag>r 數(shù)據(jù)中的顯式 s 可以被靜默刪除,而生成的樹中沒有相應(yīng)的節(jié)點。下面是一些代碼,展示了我一直在采取的方法:https://play.golang.org/p/T5WjdtjNcqqpackage mainimport (? ? "bytes"? ? "fmt"? ? "golang.org/x/net/html")func main() {? ? inputs := []string{ "",? ? ? ? "~",? ? ? ? "<",? ? ? ? "<ht",? ? ? ? "<html",? ? ? ? "<html>",? ? ? ? "<html><",? ? ? ? "<html><titl",? ? ? ? "<html><title",? ? ? ? "<html><title>",? ? ? ? "<html><title>The C Progr",? ? ? ? "<html><title>The C Programming Language",? ? ? ? "<html><title>The C Programming Language<",? ? ? ? "<html><title>The C Programming Language</",? ? ? ? "<html><title>The C Programming Language</ti",? ? ? ? "<html><title>The C Programming Language</title",? ? ? ? "<html><title>The C Programming Language</title>",? ? ? ? "<html><title>The C Programming Language</title><",? ? ? ? "<html><title>The C Programming Language</title></",? ? ? ? "<html><title>The C Programming Language</title></ht",? ? ? ? "<html><title>The C Programming Language</title></html",? ? ? ? "<html><title>The C Programming Language</title></html>",? ? }? ? for _, in := range inputs {? ? ? ? fmt.Printf("%s\n", in)? ? ? ? r := bytes.NewReader([]byte(in))? ? ? ? _, err := html.Parse(r)? ? ? ? if err != nil {? ? ? ? ? ? fmt.Printf("COULD NOT PARSE HTML\n")? ? ? ? ? ? panic(err)? ? ? ? }? ? }}愚蠢的我,我本以為其中許多會產(chǎn)生錯誤,因為從表面上看它們是無效的 HTML,但上面的代碼在沒有 'ing 的情況下遍歷所有輸入字符串&mdash;&mdash;也就是說,沒有panic非nil errfrom html.Parse()。我想我很感激一個寬松/寬容的 HTML 解析器,但是:有沒有人有一個在輸入 Go 時會產(chǎn)生錯誤的文本示例html.Parse()?
查看完整描述

1 回答

?
HUWWW

TA貢獻(xiàn)1874條經(jīng)驗 獲得超12個贊

似乎唯一返回的錯誤可能是:

  • io.EOF 一旦 r 完全讀取成功;

  • 底層 io.Reader 返回的任何其他錯誤;或者

  • html.ErrBufferExceeded

在初始讀取后如何觸發(fā) ErrBufferExceeded 對我來說并不明顯,但您可以通過提供虛擬讀取器來觸發(fā) html.Parse 的錯誤:

type ErrReader struct { Error error }


func (e *ErrReader) Read([]byte) (int, error) {

? ? return nil, e.Error

}

https://play.golang.org/p/s78HpfMLAI8

希望有幫助


查看完整回答
反對 回復(fù) 2023-07-10
  • 1 回答
  • 0 關(guān)注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號