Есть ли причина использовать XML :: LibXML :: Number-object в моем XML :: LibXML-примере? - PullRequest
0 голосов
/ 18 мая 2010

В этом примере я получаю время «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

1 Ответ

2 голосов
/ 19 мая 2010

Хотя я довольно часто использовал 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');
...