使用Perl中的XML :: XPath模块获取节点值

我使用下面的代码XML文件获取节点的值:
use XML::XPath;
use XML::XPath::XMLParser;

my $pt1 = XML::XPath->new(filename => 'test1.xml');

my $nodeset = $pt1->find('/file1/table/tname'); 

foreach my $node ($nodeset->get_nodelist) 
{
   print $node->getNodeValue."\n";
}

‘test1.xml’的内容如下:

<file1>
    <table>
        <tname>_sys_ident</tname>
        <ttype>regular</ttype>
        <col>
            <name>_sys_ident_asp</name>
            <type>varchar(16)</type>
            <fkey>_sys_asp</fkey>
            <attr>PRIMARY KEY</attr>
        </col>
    </table>
</file1>

我想打印tname的值(即_sys_ident).
但上面的代码没有打印任何东西.

如果我在for循环中使用以下内容

print XML::XPath::XMLParser::as_string($node);

然后,它给出以下输出

<tname>_sys_ident_asp</tname>

我不想要这个完整的节点名称和值字符串.我只想要节点值.
这是我第一次尝试使用XML和XPath.请告诉我我做错了什么.

解决方法

getNodeValue适用于 attribute个节点.对于 elements,您需要string_value方法
foreach my $node ($nodeset->get_nodelist) 
{
   print $node->string_value."\n";
}

相关文章

忍不住在 PerlChina 邮件列表中盘点了一下 Perl 里的 Web 应用框架(巧的是 PerlBuzz 最近也有一篇相关...
bless有两个参数:对象的引用、类的名称。 类的名称是一个字符串,代表了类的类型信息,这是理解bless的...
gb2312转Utf的方法: use Encode; my $str = "中文"; $str_cnsoftware = encode("utf-8...
  perl 计算硬盘利用率, 以%来查看硬盘资源是否存在IO消耗cpu资源情况; 部份代码参考了iostat源码;...
1 简单变量 Perl 的 Hello World 是怎么写的呢?请看下面的程序: #!/usr/bin/perl print "Hello W...
本文介绍Perl的Perl的简单语法,包括基本输入输出、分支循环控制结构、函数、常用系统调用和文件操作,...