我使用的是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>
答案 0 :(得分:3)
我认为这会奏效,但会产生不同的输出
my $text2->{tag1} = [4,{tag3 => 6}];
$resp->data()->{'text'} = $text2;
的问候,
编辑:
my $text2->{tag1} = [4,['val',{tag3 => 6}]];
答案 1 :(得分:3)
该模块使用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
元素。)
答案 2 :(得分:1)
解决方法是将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;