0

この例では、「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
4

1 に答える 1

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');
于 2010-05-18T21:25:18.287 に答える