perl - Xpath 在 Perl 中不工作,但在浏览器中工作
问题描述
我正在尝试使用以下方法从表格单元格中获取数据:
my $data = $tree->findvalue('(.//table[@class="tab openTab"]/tbody/tr/td/text())[1]');
当我在浏览器中使用 $x('(.//table[@ class="tab openTab"]/tbody/tr/td/text())[1]') 但拒绝在 Perl 中工作(没有返回数据)。Perl 代码很好,因为我使用相同的 $tree 从同一来源获取了一些其他数据。
怎么会这样?
解决方案
从技术上讲,每个表都有一个 TBODY 元素,即使它的开始和结束标记都被省略了。您的浏览器知道这一点,并在其对象树中创建一个 TBODY。
XML::LibXML 只是一个 XML 解析器。与 HTML 所基于的 SGML 不同,XML 没有隐含元素的概念。XML::LibXML 支持 HTML 语法,但无论是解析 XML 还是 HTML,解析器返回的文档都是文件中实际内容的表示。如果在文件中没有找到任何 TBODY 元素,则不添加任何 TBODY 元素。
所以table/tbody/tr/td
适合你的浏览器创建的树,但不适合提供给 XML::LibXML 的文件。
推荐阅读
- c# - TryParse 无法正常转换加入日期,如“270619”
- performance - 全局变量的最佳实践和性能
- python - 处理多个熊猫与空值合并
- c++ - 如何将 boost::spirit X3 与 QString 结合使用?
- swift - 有没有办法根据静态或动态使用有条件地定义 Podspec 属性?
- python - 如何在 Python 中通过 Selenium 获取 textContent
- mysql - 无法构建 mysqlclient ,轮子无法构建。pip install mysqlclient 不工作
- excel - MS Excel:要应用于所选图表的通用宏
- docker - 使用 Docker 时将 Celery 连接到 Redis 时出错
- nginx - 在路径上服务的 nginx 配置问题