2010-05-18 24 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');