1

简短的问题:选择器 API 是否适合处理 XML 文档?

更长的问题是“我为什么要问”......
我正在制作一些旧代码,这些旧代码利用客户端生成的 XML 和 XPath 变成跨浏览器的东西,在更高版本的 IE(10 +) 以及低至 IE7(以及 Chrome、Firefox 等...)

现在关于 IE 中的 XPath 支持存在各种 问题,而且它似乎不再受到关注(不evaluate(),不SelectNodes())。据称某些类已被列入白名单,但一些测试似乎暗示在 IE10 中启用 ActiveX 过滤时这是不可靠的。

我玩过 wicked-good-xpath,但遇到了一些 XPath 形式的问题。此外,如果 IE 再也不会支持 XPath,我宁愿不要永远依赖外部库,而是寻找下一个“最好”的东西来使用。

有人指出,选择器 API 现在是推荐的选择。不过我遇到的问题是它主要似乎是一个 HTML 选择 API(主要是因为它是从 CSS 发展而来的,因此它具有类和 ID 属性的特殊情况——可能还有其他 HTML 主义我还没有见过)。

因此,选择器 API 是否适合处理 XML 文档?鉴于在 IE 中缺乏支持,答案可能是“是”,但我看不到任何给出明确建议(或反建议)的权威。

4

1 回答 1

2

那当然是。尽管 CSS 确实被设计为 HTML 的伴侣,但它也被设计为与文档语言无关,HTML 主义与一般规则分开定义(但仍然兼容),从 CSS 选择器派生的选择器标准也是如此句法。

Selectors API 所基于的Selectors 标准是这样开始的:

选择器是与树中的元素匹配的模式,因此构成了可用于在 XML 文档中选择节点的多种技术之一。选择器已针对 HTML 和 XML 进行了优化,旨在用于性能关键代码。

实现可以使用适当的解析器从 HTML 或 XML 构建 DOM 树,然后可以使用选择器对其进行查询。使用选择器匹配 XML 元素应该没有任何问题。

请注意,虽然 HTML 和 XML 实际上共享 ID 和类语义(例如,您可以在 XSD 中定义 ID 和 IDREF 属性),但如果 Selectors API 实现知道特定风格的XML 定义了这些语义。由于您使用的实现是浏览器,因此它理解的唯一 XML 风格很可能是广泛采用的 Web 标准,例如 SVG 和 MathML,而不是例如您内部的 XML 风格。不过,您仍然可以使用基本的类型选择器、属性选择器、结构伪类和组合器,它们应该足以满足您的需求。

您最终会遇到的大多数限制可能在于选择器语法本身,尽管其中一些限制正在选择器级别 4选择器 API 级别 2中得到纠正,主题指示符为:matches()、 扩展:not():nth-match():nth-last-match():scope,其中。

于 2013-12-19T15:48:50.670 回答