由火虫产生的xpath中的Tbody标签
我正在尝试使用ruby hpricot库从在线htmls中提取一些数据。 我使用firefox扩展fire bug来获取所选项目的xpath。
生成的xpath表达式中始终存在额外的tbody标记。 在某些情况下,我必须从表达式中删除tbody标记以获得结果,而在其他情况下,我必须保留标记以获得结果。
我只是无法弄清楚何时保留tbody标签以及何时不能。
为了考虑并避免此问题,请使用以下类型的XPath表达式 :
/locStep1/locStep2/.../table/YourSubExpression | /locStep1/locStep2/.../table/tbody/YourSubExpression
如果table
没有tbody
子节点,则union运算符( |
)的第二个参数不选择任何节点,并且union的第一个参数选择所需节点。
或者,如果table
具有 tbody
子节点,则union运算符的第一个参数不选择任何节点,并且union的第二个参数选择所需节点。
最终结果 :在两种情况下都选择了所需节点
使用HTML 4或XHTML作为text / html,解析器总是推断一个tbody
元素来包装tr
元素,这些元素是解析标记table
元素的直接子元素,这就是为什么在浏览器DOM中HTML table
总是有的包含任何tr
元素的tbody
和像Firebug这样的工具为您提供了适用于Firefox / Mozilla DOM的路径。 我不知道你的Ruby库使用什么样的解析器,也许它使用XHTML文档的XML解析器,而XML解析器不会推断table
元素的tbody
元素。
HTML5总是添加tbody元素,如果它没有明确的 – 它是处理无效HTML的修复策略的一部分。 如果您想要应对各种环境,使用表// tr可能有意义。