7

我正在使用下面的代码从 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。请告诉我我做错了什么。

4

2 回答 2

9

getNodeValue用于属性节点。对于elements,您需要以下string_value方法:

foreach my $node ($nodeset->get_nodelist) 
{
   print $node->string_value."\n";
}
于 2012-04-12T10:20:48.670 回答
1

对于您的 xpath,请尝试 /file1/table/tname/text()

于 2012-04-14T01:34:53.517 回答