首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从XML::Simple访问嵌套数据结构中的数据?

如何从XML::Simple访问嵌套数据结构中的数据?
EN

Stack Overflow用户
提问于 2012-06-26 08:13:52
回答 1查看 547关注 0票数 3

我必须编写一个Perl脚本将XML文件转换为CSV文件。我已经在一个上下文中写了一些简单的东西,并且需要在不同的数据集上增强它,但是我不知道该怎么做。

我使用的是XML::Simple

以下是数据的一条记录:

代码语言:javascript
复制
<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模块,我看到数据是这样解析的:

代码语言:javascript
复制
'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'
            }
        ]
    },

下面是我尝试用来执行此导出的一些代码:

代码语言:javascript
复制
foreach $o (@{$data->{'custom-object'}}) {
    print $o->{'type-id'},   ",";
    print $o->{'object-id'}, ",";
    print $o->{'custom-object'}->{'object-attribute'}->{'email'}, ",";
    print "\n";

type-idobject-id属性可以正确输出,但是我不知道如何打印object-attribute引用中的数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-26 08:52:28

您需要像对custom-object数组引用所做的那样,迭代您的object-attribute数组引用。另外,还可以查看Text::CSV,以获得更健壮的csv文件创建方式。

代码语言:javascript
复制
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";
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11199164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档