【问题标题】:XML::LibXML: How to get a Number/Boolean-object with find?XML::LibXML:如何使用 find 获取数字/布尔对象?
【发布时间】:2011-02-20 18:28:09
【问题描述】:

来自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' );

输出

删除

【问题讨论】:

    标签: perl find xml-libxml


    【解决方案1】:
    $root -> find ("number(//files/age[@units = 'hours']"))
    

    【讨论】:

      【解决方案2】:

      您的脚本打印出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
      

      【讨论】:

        猜你喜欢
        • 2021-08-15
        • 2019-04-11
        • 2020-08-05
        • 1970-01-01
        • 1970-01-01
        • 2019-11-15
        • 2011-04-24
        • 1970-01-01
        • 2022-01-21
        相关资源
        最近更新 更多