我有一个基本上是HTML标签的元素数组。下面是一个例子
<L>
<LI>
<LI_Label>Label1</LI_Label>
<LI_Title>Title1</LI_Title>
</LI>
<LI>
<LI_Label>Label2</LI_Label>
<LI_Title>Title2</LI_Title>
</LI>
<LI>
<LI_Label>Label3</LI_Label>
<LI_Title>Title3</LI_Title>
</LI>
</L>
我试图只提取LI_Title元素并将它们存储到一个单独的数组中,然后我想连接成一个完整的字符串。对于提取和存储,我使用以下脚本。但是,当我打印数组时,整个HTML块都在Found_LI数组中,而不仅仅是我期望的LI_Title元素。希望有人在这里可以指出我在下面做错了什么?
foreach (@po_siblings)
{
if ($_ =~ /LI_Title/)
{
push(@found_LI,$_);
}
}
print "@found_LI\n";
答案 0 :(得分:1)
由于您的示例“html”实际上是格式良好的XML - 为什么不使用XML解析器并使用XPath查询查找节点和值?这是使用XML :: LibXML解决问题的示例脚本:
use strict;
use XML::LibXML;
my $blob = <<'EOF';
<L>
<LI>
<LI_Label>Label1</LI_Label>
<LI_Title>Title1</LI_Title>
</LI>
<LI>
<LI_Label>Label2</LI_Label>
<LI_Title>Title2</LI_Title>
</LI>
<LI>
<LI_Label>Label3</LI_Label>
<LI_Title>Title3</LI_Title>
</LI>
</L>
EOF
my $p = XML::LibXML->new;
my $doc = $p->parse_string($blob);
print join(" ", map { $_->textContent } $doc->findnodes('/L/LI/LI_Title')), "\n";