html - 试图在 xpath 读取值

标签 html xml perl xpath

我正在尝试获取此网站上列出的学区的值(value):http://gis.nyc.gov/dcp/at/f1.jsp?submit=true&house_nbr=310&street_name=Lenox+Avenue&boro=1

我使用 Firebug 来获取该值的 XPath:
/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr[3]/td/table/tbody/tr[2]/td[2]/table/tbody/tr[2]/td/table/tbody/tr[10]/td[2]

并想用 Perl 阅读它。我写了以下代码:

#!/usr/bin/perl -w

use HTML::TreeBuilder::XPath;
use Data::Dumper;

my $tree= HTML::TreeBuilder::XPath->new;

$tree->parse_file("test.html");

my @nb=$tree->findvalue( '/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr[3]/td/table/tbody/tr[2]/td[2]/table/tbody/tr[2]/td/table/tbody/tr[10]/td[2]');

print Dumper(@nb);

但它只返回 $VAR1 = ''; .

有什么建议么。为了让它运行,我只是将网页中的源代码复制到 test.html 中。

谢谢!

最佳答案

某些 HTML 元素(HTML、HEAD、BODY 和 TBODY)的开始标签是可选的。看一眼

...<table><tr><td>Foo</td></tr></table>...

根据 HTML,该片段代表了四个元素:
TABLE
   TBODY
      TR
         TD

Firefox 创建所有四个元素,因此它为 TD 元素提供以下 xpath:
.../table/tbody/tr/td

HTML::TreeBuilder 可能不会在元素的开始标签被省略时创建元素,因此它只会为该片段创建三个元素:
TABLE
   TR
      TD

您需要使用以下 xpath 来定位 TD 元素:
.../table/tr/td

我敢打赌,如果您删除 tbody,您会找到结果。来自您的 xpath 的测试,因为 TBODY 元素很可能在文件中找不到。

关于html - 试图在 xpath 读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7732116/

相关文章:

xml - HTML/HTML5 的默认命名空间是什么?

Perl 词法分析器 : why does "<=>" eq "=" in the context of <=><=><=>?

c# - 将xml数据显示成html

javascript - 如何限制div中的图像大小

java - 网页上有多个选项卡

javascript - Firefox 在使用 JavaScript 动画的 Logo 上方添加了不需要的细线

xml - 即使使用 <xsl :text> tag,XSL 也会忽略我的空格

Perl:有人可以解释一下这段代码吗?它涉及映射、排序、tr 和引用。 (修正施瓦兹变换)

perl - 使用中间变量访问电子表格::Read sheets时出错

javascript - 带字符边框的数字输入