关于NodeLists的快速问题(Perl)

时间:2014-05-25 05:20:48

标签: xml perl nodelist

我有一个NodeList,我想

  1. 查明大小是否等于1
  2. 2.如果列表等于1

    ,则打印节点的内容
     my @dbRefs     = $context->findnodes('.//u:dbReference[@type="EC"]/@id', $entry);
     if(@dbRefs == 1){
        print @dbRefs->get_node(1), "\n";
     }
    

2 个答案:

答案 0 :(得分:1)

根据findnodes

的文档
  

@nodes = $node->findnodes( $xpath_expression );

     

findnodes计算当前节点上的xpath表达式(XPath 1.0),并将结果节点集作为数组返回。在标量上下文中,返回XML::LibXML::NodeList对象。

由于你只是拉一个数组,要获得第一个元素只需使用$dbRefs[0]

my @dbRefs = $context->findnodes('.//u:dbReference[@type="EC"]/@id', $entry);
if (@dbRefs == 1){
    print $dbRefs[0], "\n";
}

答案 1 :(得分:0)

findnodes方法返回 列表上下文中的节点对象列表,这就是你拥有它的方式,单个XML::LibXML::NodeList标量上下文中的对象。

您处理结果的方式取决于您拥有的价值。

在列表上下文中,您可以编写

my @dbRefs = $context->findnodes('.//u:dbReference[@type="EC"]/@id', $entry);

if (@dbRefs == 1) {
  print $dbRefs[0], "\n";
}

或使用标量上下文

my $dbRefs = $context->findnodes('.//u:dbReference[@type="EC"]/@id', $entry);

if ($dbRefs->size == 1) {
  print $dbRefs->get_node(1), "\n";
}