gpt4 book ai didi

go - 以通用方式使用 html.ParseFragment

转载 作者:IT王子 更新时间:2023-10-29 02:17:38 27 4
gpt4 key购买 nike

使用实验性的 code.google.com/p/go.net/html 包,我们可以使用 ParseFragment 来解析 HTML 文档的某些子部分。

像这样:

var s = `
<option id="foo">first</option>
<option Class="tester">second</option>
<option>third</option>
`
doc, err := html.ParseFragment(strings.NewReader(s), &html.Node{
Type: html.ElementNode,
Data: "body",
DataAtom: atom.Body,
})

这适用于大多数元素。但当某些元素位于 HTML 的根位置时,它似乎不起作用,例如 tbodytrtd(和也许其他人,不确定)。它只是忽略标签,只给出文本内容。

这可以通过提供语义正确的父级而不是 atom.Body 来补救,但这需要我们提前知道 HTML 是什么。

我希望有一个像 atom.DocumentFragment 这样的通用根,但我没有看到。那么有没有什么方法可以使用它来处理任意 HTML 片段?

最佳答案

ParseFragment 始终是上下文相关的,因为它遵循 HTML5 片段解析算法。该算法旨在实现 DOM innerHTML 属性,从给定的 innerHTML 字符串生成正确的树取决于周围的上下文(特别是上下文是否在表中)。

因此 html 包无法独立于上下文解析 HTML 片段。

如果您需要有关解析如何取决于上下文的更多信息,请参阅 http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#reset-the-insertion-mode-appropriately

关于go - 以通用方式使用 html.ParseFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21421704/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com