0

我有一个元素数组,它们基本上是 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 元素并将它们存储到一个单独的数组中,然后我想将其连接成 1 个完整的字符串。对于提取和存储,我使用以下脚本。但是,当我打印数组时,整个 HTML 块都在 Found_LI 数组中,而不仅仅是 LI_Title 元素,正如我所期望的那样。希望这里有人能指出我在下面做错了什么?

foreach (@po_siblings)
{
    if ($_ =~ /LI_Title/)
    {
        push(@found_LI,$_);
    }
}
print "@found_LI\n";
4

1 回答 1

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";
于 2013-07-07T19:32:45.563 回答