如何使用HTML :: TreeBuilder获取html元素的值

时间:2014-03-14 16:18:02

标签: perl

我有一个perl数组:

Print Dumper(\@jsession);

$VAR1 = [
'<html><body><form name = \'form\' id=\'form\' method = \'POST\' action = \'/Site.jsp\'><input type = hidden name = \'phpSessionID\' value = \'RBOpXs47l6AOw**\'><input type = hidden name = \'LoggedUserName\' value = \'User\'><!--input type = submit name = \'button\' value = \'goAhead\'--></form> <script language = \'JavaScript\'> document.getElementById(\'frmWelcome\').submit();</script></body'</html>
];

我想将phpSessionID元素的值转换为perl变量。

这是我尝试过的HTML :: TreeBuilder代码:

$tree=HTML::TreeBuilder->new_from_content(@jsession);
$tree->dump();

它实际上是从数组中打印HTML部分,但我如何使用它来获取我需要的元素的值?

以下是实际适合我的代码,以防其他人在哪里搜索:​​

$tree=HTML::TreeBuilder->new_from_content(@jsession);
$first_match = $tree->find_by_attribute('name' => 'phpSessionID');
$first_match->dump();
$value = $first_match->attr('value');
chomp($value);
print "$value";

1 个答案:

答案 0 :(得分:1)

您使用来自根元素的look_down(https://metacpan.org/pod/HTML::Element#look_down)来描述和找到您想要的元素 -

@elements = $h->look_down( ...criteria... ); 
$first_match = $h->look_down( ...criteria... ); 
  

这从$h开始并通过它看起来   元素后代(按预先订购),寻找与之匹配的元素   您指定的标准。在列表上下文中,返回匹配的所有元素   所有给定的标准;在标量上下文中,返回第一个这样的   element(或undef,如果没有匹配)。

然后在找到的元素上使用attr(https://metacpan.org/pod/HTML::Element#attr)来获取属性值。

$value = $h->attr('attr');
$old_value = $h->attr('attr', $new_value);
  

返回(可选地设置)$ h的给定属性的值。该   强制使用属性名称(但不是值,如果提供)   小写。如果尝试读取不存在的属性的值   这个元素,返回值是undef。如果设置新值,则   返回该属性的旧值。