2010-05-18 2 views
0

В этом примере я добираюсь до времен «96». Есть ли возможный случай, когда для достижения цели мне понадобится XML :: LibXML-Number-object?Есть ли причина использовать XML :: LibXML :: Number-object в моем примере XML :: LibXML?

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

+0

В этом случае это не пойдет не так - я ищу пример с XML :: LibXML :: Number-объектом, который может убедить меня, что существует потребность в XML :: LibXML :: Number-object. –

ответ

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