XML :: Simple XMLin解析KeyAttr的问题

时间:2013-10-07 17:19:51

标签: xml perl

XML :: Simple 2.18
Perl 5.10

我目前面临的问题是强制执行XML Parser如何处理'approver'元素的单个与多个。在下面的XML中,使用单个'approver'元素,解析器不会将元素折叠到subhash中(但我需要它来执行此操作,对于单个或多个)。

<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添加另一个'approver'元素,例如:

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

然后解析如下:数据转储

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

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

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

1 个答案:

答案 0 :(得分:4)

ForceArray => [qw( form_field resource approver )]