0

在这个例子中,我得到时间'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
4

1 回答 1

2

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

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

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

我发现对获取多个值有用的成语是:

my @values = map { $_->to_literal } $doc->find('//files/age');
于 2010-05-18T21:25:18.287 回答