在这个例子中,我得到的时间是'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
答案 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');