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元素被解析为数组而不是嵌套的哈希(我不想要)。
如何强制解析器始终创建嵌套哈希,即使对于单个元素也是如此?
答案 0 :(得分:4)
ForceArray => [qw( form_field resource approver )]