是否有理由在我的XML :: LibXML示例中使用XML :: LibXML :: Number-object?

时间:2010-05-18 10:03:14

标签: perl xml-libxml

在这个例子中,我得到的时间是'96'。是否有可能需要XML :: LibXML-Number-object来实现目标?

#!/usr/bin/env perl
use warnings; use strict;
use 5.012;
use XML::LibXML;

my $xml_string =<<EOF;
<?xml version="1.0" encoding="UTF-8"?>
<filesystem>
   <path>
     <dirname>/var</dirname>
     <files>
       <action>delete</action>
       <age units="hours">10</age>
     </files>
     <files>
       <action>delete</action>
       <age units="hours">96</age>
     </files>
   </path>
</filesystem>
EOF
#/

my $doc = XML::LibXML->load_xml( string => $xml_string );
my $root = $doc->documentElement;

my $result = $root->find( '//files/age[@units="hours"]' );
$result = $result->get_node( 1 );
say ref $result; # XML::LibXML::Element
say $result->textContent; # 96

$result =  $root->find ( 'number( //files/age[@units="hours"] )' );
say ref $result; # XML::LibXML::Number
say $result; # 96

1 个答案:

答案 0 :(得分:2)

虽然我使用过XML :: LibXML,但我从未遇到过XML :: LibXML :: Number类。似乎存在允许XPath表达式对节点的文本内容进行数字断言(例如:&gt; 10)。

如果您想要的只是数字'96',那么最简单的方法可能是:

my $result = $root->findvalue( '//files/age[@units="hours"]' );

我认为有用于获取多个值的习语是:

my @values = map { $_->to_literal } $doc->find('//files/age');