我有一个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";
答案 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。如果设置新值,则 返回该属性的旧值。