使用 XML::LibXML 打印输出
Print output using XML::LibXML
my $doc = $parser->parse_string( $res->content );
my $root = $doc->getDocumentElement;
my @objects = $root->getElementsByTagName('OBJECT');
foreach my $object ( @objects ){
my $name = $object->firstChild;
print "OBJECT = " . $name . "\n";}
OUTPUT is:
OBJECT = XML::LibXML::Text=SCALAR(0x262e170)
OBJECT = XML::LibXML::Text=SCALAR(0x2ee4b00)
OBJECT = XML::LibXML::Text=SCALAR(0x262e170)
OBJECT = XML::LibXML::Text=SCALAR(0x2ee4b00)
谁能解释一下为什么 print 会像这样打印 $name
属性值?为什么当我用几乎相同的代码使用函数 getAttribute
时打印正常?
getAttribute
returns 一个属性,而 firstChild
returns 一个文本节点、元素、处理指令或注释。
您看到的是打印对象的正常 Perl 方式:它打印它的 class 和地址。您的 XML::LibXML seems to be a bit antique, recent versions overload 字符串化版本和代码生成实际的文本节点。
#!/usr/bin/perl
use warnings;
use strict;
use XML::LibXML;
my $doc = 'XML::LibXML'->load_xml( string => << '__XML__');
<root>
<OBJECT name="o1">hello</OBJECT>
</root>
__XML__
my @objects = $doc->getElementsByTagName('OBJECT');
for my $object (@objects) {
print 'OBJECT = ', $object->firstChild, "\n";
}
输出:
OBJECT = hello
旧版本需要调用nodeValue
或data
方法
print 'OBJECT = ', $object->firstChild->data, "\n";
my $doc = $parser->parse_string( $res->content );
my $root = $doc->getDocumentElement;
my @objects = $root->getElementsByTagName('OBJECT');
foreach my $object ( @objects ){
my $name = $object->firstChild;
print "OBJECT = " . $name . "\n";}
OUTPUT is:
OBJECT = XML::LibXML::Text=SCALAR(0x262e170)
OBJECT = XML::LibXML::Text=SCALAR(0x2ee4b00)
OBJECT = XML::LibXML::Text=SCALAR(0x262e170)
OBJECT = XML::LibXML::Text=SCALAR(0x2ee4b00)
谁能解释一下为什么 print 会像这样打印 $name
属性值?为什么当我用几乎相同的代码使用函数 getAttribute
时打印正常?
getAttribute
returns 一个属性,而 firstChild
returns 一个文本节点、元素、处理指令或注释。
您看到的是打印对象的正常 Perl 方式:它打印它的 class 和地址。您的 XML::LibXML seems to be a bit antique, recent versions overload 字符串化版本和代码生成实际的文本节点。
#!/usr/bin/perl
use warnings;
use strict;
use XML::LibXML;
my $doc = 'XML::LibXML'->load_xml( string => << '__XML__');
<root>
<OBJECT name="o1">hello</OBJECT>
</root>
__XML__
my @objects = $doc->getElementsByTagName('OBJECT');
for my $object (@objects) {
print 'OBJECT = ', $object->firstChild, "\n";
}
输出:
OBJECT = hello
旧版本需要调用nodeValue
或data
方法
print 'OBJECT = ', $object->firstChild->data, "\n";