我有一個Perl腳本,它讀取沒有內容的XML文件,只讀取元素中的屬性。如何使用Perl的XML :: Simple獲取XML元素的屬性?
像這樣:
<league>
<game name="bla"/>
</league>
現在我試圖讓遊戲中的屬性 '名'。
我試過使用$xml->{league}->{game}->{name}
和$xml->{league}->{game}->['name']
但他們都不工作。關於哈希問題的一些東西。
有沒有人可以幫助我獲得價值?
我有一個Perl腳本,它讀取沒有內容的XML文件,只讀取元素中的屬性。如何使用Perl的XML :: Simple獲取XML元素的屬性?
像這樣:
<league>
<game name="bla"/>
</league>
現在我試圖讓遊戲中的屬性 '名'。
我試過使用$xml->{league}->{game}->{name}
和$xml->{league}->{game}->['name']
但他們都不工作。關於哈希問題的一些東西。
有沒有人可以幫助我獲得價值?
那麼從您發佈的XML,我得到這個:
Entity: line 3: parser error : Opening and ending tag mismatch: league line 0 and leage
它甚至不似乎是一個嚴格的/警告的問題,因爲當我的評論我的USUW出出現。
但是,如果你有正確的標籤,這應該工作:
$xml->{game}{name};
如果我打電話XMLin
與KeepRoot => 1
,你會在找到它:
$xml->{league}{game}{name};
如果您有麻煩定位如何讀取數據,請執行以下操作:
use 5.010;
use strict;
use warnings;
use Data::Dumper;
use XML::Simple;
my $xml = XMLin($input);
say Data::Dumper->Dump([ $xml ], [ '$xml' ]);
而且n使用所提供結構的路徑。
注: 「不是數組引用在」 即使不打開了警告:
$xml->{league}->{game}->['name'];
應該已經死亡。 ['string']
是以字符串'string'
作爲唯一元素的數組的參考。而且,如果$xml->{league}{game}
是數組,它將因非數字錯誤而死亡,因爲字符串不會處理數組。
$ xml - > {game} {name};給我一個: 不是parser.pl第22行的HASH參考。 – baklap 2010-11-05 15:06:39
@baklap,參見Data :: Dumper的建議。 – Axeman 2010-11-05 15:27:59
謝謝,把它輸出到一個文件。但我明白了什麼是錯的。我發佈的XML只是一個簡單的例子,而不是真正的XML。我的錯。 出錯的事情是有些是{元素}的東西,有些是['名稱'](不知道有什麼區別)我可以打印{元素}的東西,但[['名字']的東西不可打印,我不知道該怎麼做... – baklap 2010-11-05 15:30:01
我通常我實例化XML ::簡單對象是這樣的:
use XML::Simple ':strict';
my $xs = XML::Simple->new(KeepRoot => 1, KeyAttr => 1, ForceArray => 1);
它允許結構是單一的,可能多個子元素之間是一致的。有了這些設置,該代碼就會獲取你的價值:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Simple ':strict';
my $xs = XML::Simple->new(KeepRoot => 1, KeyAttr => 1, ForceArray => 1);
my $ref = $xs->XMLin('data.xml');
print $ref->{league}[0]{game}[0]{name};
我又增加了遊戲標籤,並在聯賽標籤作爲一個例子中的屬性,這是XML:
<league name="baz">
<game name="bla"/>
<game name="foo"/>
</league>
和數據: :Dumper的輸出是:
$VAR1 = {
'league' => [
{
'game' => [
{
'name' => 'bla'
},
{
'name' => 'foo'
}
],
'name' => 'baz'
}
]
};
設置'KeyAttr => 1'沒有什麼意義。也許你的意思是'KeyAttr => {}'。 – 2010-11-07 20:21:24
KeyAttr => [],相反,我猜'1'會破壞名爲'1'的XML標籤 – MkV 2010-11-14 02:20:53
顯示您的程序。 – 2010-11-05 17:20:15