当前位置: 首页 > 面试题库 >

以通用方式使用html.ParseFragment

宇文航
2023-03-14
问题内容

使用实验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片段一起使用呢?


问题答案:

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

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

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



 类似资料:
  • 问题内容: 我正在创建具有多个表的复杂查询,并且需要列出结果。通常,我使用并将结果映射到JPA-Representation: 然后,我可以访问用户类定义的所有值。但是,如何访问从本地多表查询返回的字段值?我得到的是一个对象列表。到目前为止还可以,但是那个对象是什么?数组?地图?采集?… 我想答案很简单,但是其中的大多数示例仅显示了直接转换为targetClass时的用法。 PS:在示例中,我当然

  • 使用 lavas init 创建的模板项目中,在以下场景下都会以编程方式使用 Lavas: server.dev.js 开发环境下的 SPA/SSR 模式。 server.prod.js 生产环境下的 SSR 模式。 可见以编程方式使用 Lavas 的主要场景就是 SSR 模式,而在 SPA 模式下仅仅是供开发服务器使用。因此,如果开发者选择了 SSR 模式,阅读下面的内容将十分有帮助: 如何选择

  • 问题内容: 我正在从OracleDocGenericMethod中阅读有关泛型方法的信息。当比较指出何时使用通配符以及何时使用通用方法时,我对此感到非常困惑。引用文档。 我们可以在这里使用通用方法: […]这告诉我们类型参数正在用于多态。它的唯一作用是允许在不同的调用站点使用各种实际的参数类型。在这种情况下,应使用通配符。通配符旨在支持灵活的子类型化,这就是我们在此要表达的内容。 我们难道不认为像

  • 问题内容: 我将Wicket与Wicket Auth Project一起用于表示层,因此将其与Spring Security集成在一起。这是Wicket调用的身份验证方法: 我的Spring Security XML配置的内容(里面)是: 2.3.6节。参考文档的会话固定攻击防护说: 会话固定攻击是一种潜在的风险,恶意攻击者有可能通过访问站点来创建会话,然后诱使另一个用户以相同的会话登录(通过向他

  • 问题内容: 我可以在HTML表单中使用PUT方法将数据从表单发送到服务器吗? 问题答案: XHTML 1.x表单仅支持GET和POST。GET和POST是“ method”属性的唯一允许值。