簡體   English   中英

如何使用Apache2 :: REST在XML節點中創建具有屬性的響應?

[英]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::SimpleForceArray => 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM