1

XML::Simple 2.18
Perl 5.10

私が現在抱えている問題は、XML パーサーが「承認者」要素の単一対複数を処理する方法を強制することです。以下の XML では、単一の「承認者」要素を使用して、パーサーは要素をサブハッシュに折り畳みません (ただし、単一または複数の場合はそうする必要があります)。

<ECREQUEST>
  <request event="submit">
    <form_id>3576</form_id>
    <status>Initiated</status>
    <form_fields>
      <form_field_id id="13048" type="text">
        <value><![CDATA[jamesj]]></value>
      </form_field_id>
      <form_field_id id="13047" type="text">
        <value><![CDATA[jackh]]></value>
        <resources>
          <resource name="jackh">
            <approval_type approver_id="0" name="single">
              <approvers>
                <approver name="jackh" reason=""/>
              </approvers>
            </approval_type>
          </resource>
        </resources>
      </form_field_id>
    </form_fields>
  </request>
</ECREQUEST>

データダンパー:

'approver' => {
    'name' => 'zhangj',
    'reason' => ''
}

しかし、XML に別の「承認者」要素を追加すると、次のようになります。

<approvers>
    <approver name="jackh" reason=""/>
    <approver name="jillr" reason=""/>
</approvers>

次に、次のように解析します: Data Dumper :

'approver' => {
    'jillr' => {
        'reason' => ''
    },
    'jackh' => {
        'reason' => ''
    }
}

複数の 'approver' 要素に name 属性を強制的に含めるようにする XMLinを使用KeyAttr => { approver => "+name" }してみましたが、単一の承認者要素を修正しません...残念ながら、このオプションは form_field_id 要素をネストされたハッシュではなく配列として解析することも強制します(私はしたくない)。

単一の要素であっても、パーサーに常にネストされたハッシュを作成させるにはどうすればよいですか?

4

1 に答える 1

4
ForceArray => [qw( form_field resource approver )]
于 2013-10-07T17:36:12.260 に答える