小编典典

以通用方式使用html.ParseFragment

go

使用实验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,像根位置tbodytr以及td(也许还有其他,不知道)。它只是忽略标签,仅提供文本内容。

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

我希望有类似的通用根目录atom.DocumentFragment,但我看不到。那么,是否有某种方式可以与任意HTML片段一起使用呢?


阅读 247

收藏
2020-07-02

共1个答案

小编典典

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

因此,该html程序包无法独立于其上下文来解析HTML片段。

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

2020-07-02