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

以通用方式使用 html.ParseFragment

以通用方式使用 html.ParseFragment

Go
侃侃尔雅 2021-07-15 14:01:17
使用实验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 的根位置时,它似乎不起作用,例如tbody, tr, and td(也许还有其他元素,不确定)。它只是忽略标签,只提供文本内容。这可以通过提供语义正确的父级而不是 来补救atom.Body,但这需要我们提前知道 HTML 将是什么。我希望有一个像 的通用根atom.DocumentFragment,但我没有看到。那么是否有某种方法可以使用它来处理任何任意 HTML 片段?
查看完整描述

1 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

ParseFragment总是上下文敏感的,因为它遵循 HTML5 片段解析算法。该算法是为实现 DOM innerHTML 属性而设计的,从给定的 innerHTML 字符串生成正确的树取决于周围的上下文(尤其是上下文是否在表中)。

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

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


查看完整回答
反对 回复 2021-07-19
  • 1 回答
  • 0 关注
  • 259 浏览
慕课专栏
更多

添加回答

举报

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