从数组中提取特定元素

时间:2013-07-07 16:28:49

标签: perl

我有一个基本上是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";

1 个答案:

答案 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";