2010-05-18 4 views
0

De http://metacpan.org/pod/XML::LibXML::Node:XML :: LibXML: Comment obtenir un objet Number/Boolean avec find?

find évalue l'expression XPath 1.0 utilisant le nœud actuel comme le contexte de l'expression, et renvoie le résultat en fonction de ce type de résultat l'expression XPath avait. Par exemple, le XPath "1 * 3 + 52" entraîne un objet XML :: LibXML :: Number retourné. D'autres expressions peuvent renvoyer un objet XML :: LibXML :: Boolean ou un objet XML :: LibXML :: Literal (une chaîne).

Je suppose que dans mon exemple la découverte retourne un XML :: LibXML :: objet littérales (une chaîne). Quelqu'un pourrait-il me montrer des exemples où find renvoie un objet XML :: LibXML :: Number resp. un objet 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'); 

sorties

supprimer

Répondre

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

Vos impressions script delete parce que les objets retournés par find surcharge l'opérateur "" mise en chaîne. L'objet renvoyé est en fait un XML::LibXML::NodeList. Par exemple, les éléments suivants

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

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

impressions

delete 
XML::LibXML::NodeList 
2 
XML::LibXML::Number 
Questions connexes