2013-06-12 44 views
0

我有一個Perl類,它存儲樹數據結構的節點和弧信息。如何使用XML將簡單的數組哈希擴展爲XML :: Simple

當我嘗試使用XML::Simple作爲XML輸出時,我沒有得到數組的完整擴展。

$table->{arcs} = @arcs; 
$table->{nodes} = @nodes; 

當我嘗試輸出這是XML我得到以下輸出

<?xml version='1.0'?> 
<Root> 
    <arcs>0</arcs> 
    <nodes>0</nodes> 
</Root> 

但信息被正確地存儲在陣列中。

這裏是代碼我與

my $xml = new XML::Simple(NoAttr => 1, RootName => 'Root', ForceArray => 1); 

$xml->XMLout(
    $table, 
    KeepRoot => 1, 
    OutputFile => $xml_directory . $out_file . ".xml", 
    XMLDecl => "<?xml version='1.0'?>", 
    NSExpand => 0, 
    ValueAttr => { \@node_values => 'node' } 
); 

就如何擴大了陣列的任何想法工作,而無需你希望你的標籤是什麼硬編碼?

我希望能夠從數據結構到XML進行生成。

回答

1

中的陳述

$table->{arcs} = @arcs; 
$table->{nodes} = @nodes; 

標量分配,其結果是哈希元素被設置爲數量的元件在相應的陣列。

你應該改變分配給指定引用到數組,像這樣:

$table->{arcs} = \@arcs; 
$table->{nodes} = \@nodes; 

但是這個XML結果

<Root> 
    <arcs>0</arcs> 
    <nodes>0</nodes> 
</Root> 

顯示,你所得到的尺寸是零,所以陣列實際上是空的,這只是故事的一部分。

請顯示您的完整代碼,以便我們可以看到您出錯的位置。

+0

其實我改變了我的數據結構來實現我想要的東西。第一個錯誤是當我應該存儲數組引用時試圖存儲數組。然而,我改變了我的實現,爲弧和節點提供了一個散列數組,這樣我就可以指定其他屬性,並且當我通過XMLout()傳遞時,我得到了正確的輸出。 – user2479059