2010-05-18 21 views
0

在这个例子中,我得到时间'96'。有没有可能的情况下,我需要一个XML :: LibXML-Number对象来实现目标?是否有理由在我的XML :: LibXML示例中使用XML :: LibXML :: Number对象?

#!/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

你能澄清一下你正在努力实现,并且可能给出一个更小的错误例子? – Ether 2010-05-18 16:11:02

+0

在这种情况下,它不会出现任何错误 - 我正在寻找一个XML :: LibXML :: Number对象的例子,它可以说服我,需要XML :: LibXML :: Number对象。 – 2010-05-19 05:20:48

回答

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');