1

XML::Simple 2.18
Perl 5.10

我目前遇到的问题是强制执行 XML Parser 如何处理“approver”元素的单个与多个。在下面的 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' => ''
    }
}

我尝试使用KeyAttr => { approver => "+name" }XMLin,这将强制多个“批准者”元素包含名称属性,但不修复单个批准者元素...不幸的是,此选项还强制将 form_field_id 元素解析为数组而不是嵌套哈希(我不想要)。

如何强制解析器始终创建嵌套哈希,即使是单个元素?

4

1 回答 1

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