XPath和XQuery可以在HTML文档上工作吗?

Tim*_*Tim 4 html xml xpath xquery web

我从/sf/answers/2769231811/听说HTML文档不是XML文档。

XPath和XQuery可以处理XML文档。它们可以处理HTML文档吗?为什么?

尽管我不知道为什么,但是我猜XPath可以在HTML文档上使用,因为https://www.quora.com/Why-do-we-use-XPath-in-Selenium-even-though-CSS-Selector -is-fasterhttps://html-agility-pack.net/

Mic*_*Kay 7

XQuery和XPath被定义为在称为XDM的特定数据模型上工作。在XPath 1.0中,这在XPath规范中进行了描述。在XQuery和更高版本的XPath中,它是在单独的规范中定义的。XPath和XQuery可以在定义了XDM映射的任何数据上使用。XML和HTML DOM在细节上都与XDM有所不同,但是可以(有点实用主义)定义到XDM的映射,因此XPath可以同时针对XML和HTML DOM运行。的确,尽管这两种映射不完善且在某些情况下效率不高,但它们已被广泛使用。

HTML映射到XDM的最大问题是名称空间。传统上,XPath实现将HTML元素(例如“ table”和“ p”)视为没有名称空间,因此//table//p可以使用诸如路径之类的名称空间前缀。但是在HTML5中,WhatWG决定这些元素在XHTML命名空间中,这意味着它们必须定义XPath规范的变体以容纳此类路径。

CSS选择器已经慢慢获得了XPath 1.0的许多表达能力,尽管它们肯定不如后来的版本丰富,并且由于它们主要是为HTML而不是XML设计的,因此有时使用起来更方便。我还没有看到任何性能数据,但是浏览器供应商必须付出很大的努力来使CSS更快,并且他们似乎在过去15年中对其XPath实现几乎进行了零开发,所以肯定不会。如果CSS在大多数浏览器中速度更快,我不会感到惊讶。DOM和XDM之间的差异也会造成开销:尤其是DOM中名称空间的效率很低。


wst*_*wst 5

HTML 不保证格式良好,因此 XML 解析器可能无法解析它(除非您使用的是非常有限的 HTML 子集)。然而,XHTML 是 HTML 的近亲,据我所知,它可以在具有相同功能集的浏览器中工作(请参阅: https: //www.w3.org/TR/html-polyglot/)。

但如果您已有 HTML,则需要将其转换为 XML 才能使用 XPath/XQuery。“HTML tidy”有多种实现方式,可以选择输出有效的 XML。您的 XQuery 处理器中可能提供某种形式的 tidy。如果没有,有许多语言和独立实现可能可以帮助您实现这一目标。