4

私は 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>

tag1XML ノードの属性を使用して応答を作成し、同じレベルで同じタイプのタグを作成する方法を知りたいですか?

望ましい出力は

<response message="" status="200">
  <data>
    <tag1 id="abcd"> 4 </tag1>
    <tag1>
      <tag3 id="xyz"> 6 </tag3>
    </tag1>
  </data>
</response>
4

3 に答える 3

3

これはうまくいくと思いますが、出力が少し異なります

my $text2->{tag1} = [4,{tag3 => 6}];
$resp->data()->{'text'} = $text2;

よろしく、

編集:

my $text2->{tag1} = [4,['val',{tag3 => 6}]]; 
于 2013-02-08T15:57:41.120 に答える
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ます。)

于 2013-02-17T10:38:23.993 に答える
1

これに対する解決策は、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;
于 2013-02-12T11:36:10.660 に答える