當你寫:
@{ $booklist->{detail} }
...你是說$書目 - > {}詳細返回數組引用,你想要Perl取消對它的引用到一個數組,即「@」 。
請勿使用<name>
作爲標籤。 XML :: Simple很奇怪地解析。這裏有一個例子:
1)
<?xml version='1.0' encoding='iso-8859-1'?>
<booklist>
<book>
<bname>book1</bname>
</book>
<book>
<bname>book2</bname>
</book>
</booklist>
use strict;
use warnings;
use 5.016;
use XML::Simple;
use Data::Dumper;
my $booklist = XMLin('xml.xml');
print Dumper($booklist);
--output:--
$VAR1 = {
'book' => [
{
'bname' => 'book1'
},
{
'bname' => 'book2'
}
]
};
2)現在看看會發生什麼,當你使用一個<name>
標籤:
<?xml version='1.0' encoding='iso-8859-1'?>
<booklist>
<book>
<name>book1</bname>
</book>
<book>
<name>book2</bname>
</book>
</booklist>
--output:--
$VAR1 = {
'book' => {
'book2' => {},
'book1' => {}
}
};
與你原來的例子
所以:
<?xml version='1.0' encoding='iso-8859-1'?>
<booklist>
<book>
<detail label='label1' status='active' type='none'>
<bname>book1</bname>
</detail>
<detail label='label2' status='active' type='none'>
<bname>book2</bname>
</detail>
</book>
</booklist>
--output:--
$VAR1 = {
'book' => {
'detail' => [
{
'bname' => 'book1',
'status' => 'active',
'label' => 'label1',
'type' => 'none'
},
{
'bname' => 'book2',
'status' => 'active',
'label' => 'label2',
'type' => 'none'
}
]
}
};
爲了得到所有的bname標籤,你可以這樣做:
use strict;
use warnings;
use 5.016;
use XML::Simple;
use Data::Dumper;
my $booklist = XMLin('xml.xml');
my $aref = $booklist->{book}{detail};
for my $href (@$aref) {
say $href->{bname};
}
--output:--
book1
book2
你喜歡嗎? book1,book2,文字 – user1811486
你能解釋一下你輸出哪些東西嗎? – user1811486
是的,我想要book1和book2文本作爲輸出 – user2526936