0

来自http://metacpan.org/pod/XML::LibXML::Node

find 使用当前节点作为表达式的上下文来计算 XPath 1.0 表达式,并根据 XPath 表达式的结果类型返回结果。例如,XPath "1 * 3 + 52" 会返回一个 XML::LibXML::Number 对象。其他表达式可能返回 XML::LibXML::Boolean 对象或 XML::LibXML::Literal 对象(字符串)。

我想在我的示例中 find 返回一个 XML::LibXML::Literal 对象(一个字符串)。有人可以向我展示 find 返回 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' );

输出

删除

4

2 回答 2

1
$root -> find ("number(//files/age[@units = 'hours']"))
于 2010-05-18T07:51:42.783 回答
1

您的脚本会打印delete,因为find重载 stringification operator返回的对象""。返回的对象实际上是一个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
于 2013-10-16T20:19:42.830 回答