2016-01-20 56 views
1
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) 

任何人都可以請解釋爲什麼打印打印$name這樣的屬性值?爲什麼當我使用函數getAttribute幾乎與他相同的代碼打印正常?使用XML打印輸出:: LibXML

+0

你可以顯示XML嗎?你運行的是什麼版本的XML :: LibXML? – choroba

+0

我懷疑你正在尋找一個特定的子元素,但忽略了可以有空白的子文本節點。所以請展示一個XML輸入示例並解釋您正在查找哪些數據。 –

回答

3

getAttribute返回屬性,而firstChild返回文本節點,元素,處理指令或註釋。

你看到的是一種普通的Perl打印對象的方式:它打印它的類和地址。您的XML::LibXML版本似乎有點古董,最近的版本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 

在舊版本,一個調用nodeValuedata方法需要。

print 'OBJECT = ', $object->firstChild->data, "\n";