2010-05-18 14 views
0

http://metacpan.org/pod/XML::LibXML::NodeXML :: LibXML:如何用find找到Number/Boolean對象?

查找評估使用當前節點作爲表達的上下文中的XPath 1.0表達式,並根據有什麼類型產生的XPath表達式的返回結果。例如,XPath「1 * 3 + 52」導致返回XML :: LibXML :: Number對象。其他表達式可能會返回一個XML :: LibXML :: Boolean對象或一個XML :: LibXML :: Literal對象(一個字符串)。

我想在我的例子中,find返回一個XML :: LibXML :: Literal對象(一個字符串)。有人可以向我展示如何返回XML :: LibXML :: Number對象的示例。一個XML :: LibXML :: Boolean對象?

#!/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="days">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; 

say $root->find('//files[1]/action'); 

輸出

刪除

回答

1
$root -> find ("number(//files/age[@units = 'hours']")) 
1

你的腳本打印delete因爲find返回的對象重載字符串化操作""。返回的對象實際上是一個XML::LibXML::NodeList。例如,下面的

my $result = $root->find('//files[1]/action'); 
say $result; 
say ref($result); 

$result = $root->find('count(//files)'); 
say $result; 
say ref($result); 

打印

delete 
XML::LibXML::NodeList 
2 
XML::LibXML::Number