Perl 如何使用HTML::Tree获取HTML标记的值?

Perl 如何使用HTML::Tree获取HTML标记的值?,perl,cpan,html-tree,html-treebuilder,Perl,Cpan,Html Tree,Html Treebuilder,假设我有一个数组,其中包含body标记的内容,如下所示: 打印转储程序(\@数组) 这适用于属性只有一个值的情况。 但是如何从@array中的脚本标记获取866346569493123700呢 如果您能在这方面提供任何帮助,我将不胜感激,因为我已经尝试了数小时了,您在解析HTML时使用的方法非常好。但是,您遇到了一个问题,因为您还需要来自包含JavaScript的标记内部的信息。不幸的是,除了隔离JS之外,上面的模块并不能帮助您 考虑到您的目标的简单性,我相信我只需要使用正则表达式来查找选项卡i

假设我有一个数组,其中包含body标记的内容,如下所示: 打印转储程序(\@数组)

这适用于属性只有一个值的情况。 但是如何从@array中的脚本标记获取866346569493123700呢

如果您能在这方面提供任何帮助,我将不胜感激,因为我已经尝试了数小时了,您在解析HTML时使用的方法非常好。但是,您遇到了一个问题,因为您还需要来自包含JavaScript的
标记内部的信息。不幸的是,除了隔离JS之外,上面的模块并不能帮助您

考虑到您的目标的简单性,我相信我只需要使用正则表达式来查找选项卡id。最后的命令
tabbar.setTabActive
相当简单,并且很可能不会有太大变化,因为它是一个只接受一个值的函数,并且是创建和激活此新选项卡功能的一部分

下面的代码演示如何迭代脚本标记,直到找到与tabid匹配的标记:

use HTML::TreeBuilder;

use strict;
use warnings;

my $root = HTML::TreeBuilder->new_from_content(<DATA>);

if (my $element = $root->look_down('_tag' => 'div', 'hrefmode' => 'ajax-html')) {
    print "div.id = '" . $element->attr('id') . "'\n";
} else {
    warn "div.id not found";
}

my $tabid = '';
for ($root->find_by_tag_name('script')) {
    my $scripttext = $_->as_HTML;
    if ($scripttext =~ /tabbar.setTabActive\('(\d+)'\);/) {
        $tabid = $1;
        print "TabID = '$tabid'";
        last;
    }
}
warn "Tab ID not found\n" if ! $tabid;


__DATA__
<body>
<table width='100%' height='100%'>
<tr>
<td width='100%' height='100%'
valign='top'><div style='height:100%' hrefmode='ajax-html' id='a_tabbar' 
width='100%'  imgpath='../images/datagrid/' skinColors='#FCFBFC,#F4F3EE'/>
</td>
</tr>
</table>
<script>
tabbar=newdhtmlXTabBar('a_tabbar','top');
tabbar.setImagePath('../images/datagrid/');
tabbar.setSkinColors('#FCFBFC','#F4F3EE');
tabbar.setHrefMode('ajax-html');
</script>
<script>
tabbar.addTab('866346569493123700','Details ','242px'); 
tabbar.setContentHref('866346569493123700','../reports/dhtmlgridqueryhandler.jsp?id=866346569493123700&oracleDb=read&htmlDataId=&Type=generic&queryCode=GetDetails');
tabbar.setTabActive('866346569493123700');
</script>
</body>
使用HTML::TreeBuilder;
严格使用;
使用警告;
my$root=HTML::TreeBuilder->new_from_content();
如果(my$element=$root->look_down(“'u tag'=>'div','hrefmode'=>'ajaxhtml')){
打印“div.id=”$element->attr('id')。“\n”;
}否则{
警告“未找到div.id”;
}
我的$tabid='';
对于($root->find_by_tag_name('script')){
my$scripttext=$\uU->as\uHTML;
如果($scripttext=~/tabbar.setTabActive\('(\d+)'\);/){
$tabid=$1;
打印“TabID=”$TabID';
最后;
}
}
警告“找不到选项卡ID \n”如果$塔比德;
__资料__
tabbar=newdhtmlxltabbar('a_tabbar','top');
tabbar.setImagePath('../images/datagrid/');
tabbar.setSkinColors('FCFBFC','F4F3EE');
setHrefMode('ajax-html');
tabbar.addTab('866346569493123700','Details','242px');
tabbar.setContentHref('866346569493123700','../reports/dhtmlgridqueryhandler.jsp?id=866346569493123700&oracleDb=read&htmlDataId=&Type=generic&queryCode=GetDetails');
tabbar.setTabActive('866346569493123700');
$tree=HTML::TreeBuilder->new_from_content(@array);
$first_match = $tree->find_by_attribute('hrefmode' => 'ajax-html');
$id = $first_match->attr('id');
use HTML::TreeBuilder;

use strict;
use warnings;

my $root = HTML::TreeBuilder->new_from_content(<DATA>);

if (my $element = $root->look_down('_tag' => 'div', 'hrefmode' => 'ajax-html')) {
    print "div.id = '" . $element->attr('id') . "'\n";
} else {
    warn "div.id not found";
}

my $tabid = '';
for ($root->find_by_tag_name('script')) {
    my $scripttext = $_->as_HTML;
    if ($scripttext =~ /tabbar.setTabActive\('(\d+)'\);/) {
        $tabid = $1;
        print "TabID = '$tabid'";
        last;
    }
}
warn "Tab ID not found\n" if ! $tabid;


__DATA__
<body>
<table width='100%' height='100%'>
<tr>
<td width='100%' height='100%'
valign='top'><div style='height:100%' hrefmode='ajax-html' id='a_tabbar' 
width='100%'  imgpath='../images/datagrid/' skinColors='#FCFBFC,#F4F3EE'/>
</td>
</tr>
</table>
<script>
tabbar=newdhtmlXTabBar('a_tabbar','top');
tabbar.setImagePath('../images/datagrid/');
tabbar.setSkinColors('#FCFBFC','#F4F3EE');
tabbar.setHrefMode('ajax-html');
</script>
<script>
tabbar.addTab('866346569493123700','Details ','242px'); 
tabbar.setContentHref('866346569493123700','../reports/dhtmlgridqueryhandler.jsp?id=866346569493123700&oracleDb=read&htmlDataId=&Type=generic&queryCode=GetDetails');
tabbar.setTabActive('866346569493123700');
</script>
</body>