Perl 如何使用HTML::Parser获取下一个立即标记?
我试图获取在特定Perl 如何使用HTML::Parser获取下一个立即标记?,perl,Perl,我试图获取在特定div标记之后立即出现的标记。例如,我有html代码 <div id="example"> <h2>Example</h2> <p>Hello !World</p> </div> 但这就产生了错误 在使用“strict refs”时不能将字符串(“”)用作哈希引用 如果我说的话,效果很好 $tag=$stream->get_tag('h2') $tag=$stream->get_标记('
div
标记之后立即出现的标记。例如,我有html代码
<div id="example">
<h2>Example</h2>
<p>Hello !World</p>
</div>
但这就产生了错误
在使用“strict refs”时不能将字符串(“”)用作哈希引用
如果我说的话,效果很好
$tag=$stream->get_tag('h2')代码>
$tag=$stream->get_标记('p')代码>
但是我不能这样做,因为我需要立即获取两个标记,并验证它们是否是我所期望的。如果您发布了一个可运行的示例程序,则更容易判断,但问题似乎是您没有意识到get\u tag
同时返回开始和结束标记。结束标记没有属性。开始标记返回为[$tag、$attr、$attrseq、$text]
,结束标记返回为[“/$tag”、$text]
。所以在本例中,get_标记返回h2、/h2、div等。是吗?@Rajesh,是的。如果你试图在一个结束标记上执行$tag->[1]{id}
,你会得到这个错误,因为$tag->[1]
不是散列引用。你必须先检查$tag->[0]
以查看当你使用get\u tag
时,你是否有开始标记或结束标记,或者包含结束标记的标记列表。旁注:您可能更喜欢HTML::TokeParser::Simple——它与解析器完全相同,但它返回的是标记对象,而不是arrayrefs,您必须做一些愚蠢的事情才能从中获取数据:)
while ( $tag = $stream->get_tag('div') ) {
if( $tag->[1]{id} eq 'Example' ) {
$tag = $stream->get_tag;
$tag = $stream->get_tag;
if ( $tag->[0] eq 'div' ) {
...
}
}
}