我必须编写一个Perl脚本将XML文件转换为CSV文件。我已经在一个上下文中写了一些简单的东西,并且需要在不同的数据集上增强它,但是我不知道该怎么做。
我使用的是XML::Simple。
以下是数据的一条记录:
<custom-objects xmlns="http://www.demandware.com/xml/impex/customobject/2006-10-31">
<custom-object type-id="emailBackInStockHistory" object-id="bczCAiaag0APcaaacLsvpJRmzW">
<object-attribute attribute-id="email">some@email.com</object-attribute>
<object-attribute attribute-id="emailSentAt">2010-04-10T09:00:01.000+0000</object-attribute>
<object-attribute attribute-id="productID">someprodid</object-attribute>
<object-attribute attribute-id="requestedAt">2010-04-09T10:07:54.000+0000</object-attribute>
<object-attribute attribute-id="siteID">someSITEid</object-attribute>
</custom-object>
</custom-objects>使用Data::Dumper模块,我看到数据是这样解析的:
'custom-object' => [
{
'type-id' => 'emailBackInStockHistory',
'object-id' => 'bczCAiaag0APcaaacLsvpJRmzW',
'object-attribute' => [
{
'attribute-id' => 'email',
'content' => 'some@email.com'
},
{
'attribute-id' => 'emailSentAt',
'content' => '2010-04-10T09:00:01.000+0000'
},
{
'attribute-id' => 'productID',
'content' => 'someprodid'
},
{
'attribute-id' => 'requestedAt',
'content' => '2010-04-09T10:07:54.000+0000'
},
{
'attribute-id' => 'siteID',
'content' => 'someSITEid'
}
]
},下面是我尝试用来执行此导出的一些代码:
foreach $o (@{$data->{'custom-object'}}) {
print $o->{'type-id'}, ",";
print $o->{'object-id'}, ",";
print $o->{'custom-object'}->{'object-attribute'}->{'email'}, ",";
print "\n";type-id和object-id属性可以正确输出,但是我不知道如何打印object-attribute引用中的数据。
发布于 2012-06-26 08:52:28
您需要像对custom-object数组引用所做的那样,迭代您的object-attribute数组引用。另外,还可以查看Text::CSV,以获得更健壮的csv文件创建方式。
foreach my $obj ( @{ $data->{'custom-object'} } ) {
print $obj->{'type-id'}, ",";
print $obj->{'object-id'}, ",";
foreach my $attr ( @{ $obj->{'object-attribute'} } ) {
if ( $attr->{'attribute-id'} eq 'email' ) {
print $attr->{'content'}, ",";
}
}
print "\n";
}https://stackoverflow.com/questions/11199164
复制相似问题