xpath中的body标记是由一个bug生成的



我试图使用ruby hpricot库从在线html中提取一些数据。我使用firefox扩展fire bug来获取所选项目的xpath。

生成的xpath表达式中总是有额外的tbody标记。在某些情况下,我必须从表达式中删除tbody标记才能获得结果,而在其他情况下,我必须保留该标记才能获得结果。

我就是不知道什么时候应该保留tbody标签,什么时候不应该。

为了考虑并避免这个问题,使用以下类型的XPath表达式:

 /locStep1/locStep2/.../table/YourSubExpression
|
 /locStep1/locStep2/.../table/tbody/YourSubExpression

如果table没有tbody的子节点,则联合算子(|)的第二个参数不选择节点,而联合算子的第一个参数选择需要的节点。

或者,如果table tbody,则联合运算符的第一个参数不选择节点,而联合运算符的第二个参数选择所需的节点。

最终结果:在两种情况下都选择了所需的节点

对于HTML 4或作为text/HTML的XHTML,解析器总是推断出tbody元素来包装tr元素,这些元素是已解析标记中table元素的直接子元素,这就是为什么在浏览器DOM中,HTML table总是有包含任何tr元素的tbody,并且像Firebug这样的工具为您提供了针对Firefox/Mozilla DOM的路径。我不知道您的Ruby库使用什么样的解析器,也许它使用XML解析器来处理XHTML文档,而XML解析器不推断table元素的tbody元素。

如果tbody元素没有明确存在,HTML5总是会添加它——这是处理无效HTML的修复策略的一部分。如果您想处理各种环境,使用table//tr可能是有意义的。

相关内容

  • 没有找到相关文章

最新更新