使用实验code.google.com/p/go.net/html包,我们可以ParseFragment用来解析HTML文档的某些子部分。
code.google.com/p/go.net/html
ParseFragment
像这样:
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以及td(也许还有其他,不知道)。它只是忽略标签,仅提供文本内容。
tbody
tr
td
可以通过提供语义正确的parent而不是来补救此问题atom.Body,但这需要我们提前知道HTML是什么。
atom.Body
我希望有类似的通用根目录atom.DocumentFragment,但我看不到。那么,是否有某种方式可以与任意HTML片段一起使用呢?
atom.DocumentFragment
ParseFragment始终是上下文相关的,因为它遵循HTML5片段解析算法。该算法旨在实现DOM innerHTML属性,并且从给定的innerHTML字符串生成的正确树取决于周围的上下文(尤其是上下文是否在表中)。
因此,该html程序包无法独立于其上下文来解析HTML片段。
html
如果您需要有关解析如何取决于上下文的更多信息,请参阅http://www.whatwg.org/specs/web-apps/current- work/multipage/parsing.html#reset-the-insertion-mode- appropriately