[英]How to create a response with attributes in XML nodes using Apache2::REST?
我使用的是Perl Apache2::REST
,返回數據的標准方法是發出$resp->data()
並賦值。 我有類似的東西
my $text = {
'tag1' => 4,
'tag2' => 5,
'tag3' => 6,
};
$resp->data()->{'text'} = {map { $_ => [$text ->{$_}] } keys %$text};
這給了我這樣的回應
<response message="" status="200">
<data>
<tag1>4</tag1>
<tag2>5</tag2>
<tag3>6</tag3>
</data>
</response>
我想了解如何使用XML節點tag1
的屬性創建響應,並且可以在同一級別創建相同類型的標記?
期望的輸出是
<response message="" status="200">
<data>
<tag1 id="abcd"> 4 </tag1>
<tag1>
<tag3 id="xyz"> 6 </tag3>
</tag1>
</data>
</response>
我認為這會奏效,但會產生不同的輸出
my $text2->{tag1} = [4,{tag3 => 6}];
$resp->data()->{'text'} = $text2;
問候,
編輯:
my $text2->{tag1} = [4,['val',{tag3 => 6}]];
該模塊使用XML :: Simple,但沒有選項,只有RootName
。 知道了,我們知道以下數據結構將產生您想要的輸出。
my $data = {
'tag1' => [
{
id => 'abcd',
content => '4',
},
{
'tag3' => [
{
id => 'xyz',
content => '6',
},
],
},
],
};
測試:
use XML::Simple qw( XMLout );
print XMLout($data , RootName => 'data');
輸出:
<data>
<tag1 id="abcd">4</tag1>
<tag1>
<tag3 id="xyz">6</tag3>
</tag1>
</data>
(它將提供response
元素。)
解決方案是使用perl模塊XML::Simple
和ForceArray => 1
$xml = '<tag1 a="' . '4' . '"b="4">';
$xml .= '<tag3 id="' . '3' . '">';
$xml .= '<tag2>' . '5' . '</tag2>';
$xml .= '</tag3>';
$xml .= '</tag1>';
my $tree = $simple->XMLin($xml, ForceArray => 1, KeyAttr => [ ]);
$resp->data()->{'xml'} = $tree;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.