使用实验性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
和td
(也许还有其他元素,不确定)。它只是忽略标签而只提供文本内容。
这可以通过提供语义正确的父而不是atom.Body
来解决,但这要求我们事先知道HTML将是什么。
我希望有一个像atom.DocumentFragment
这样的通用根,但我没有看到。那么有没有办法以这种方式使用它,它可以处理任何HTML片段?
答案 0 :(得分: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