Мне нужно написать скрипт Perl для преобразования XML-файла в файл CSV. Я уже написал что-то простое в одном контексте и должен улучшить его для другого набора данных и не могу понять, что делать.Как получить доступ к данным во вложенной структуре данных из XML :: Simple?
Я пользуюсь 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">[email protected]</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' => '[email protected]'
},
{
'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
.
Большое спасибо. Я фактически вырезал из исходного кода раздел, в котором я пытался это сделать, несомненно, неправильно. Но этот код не попадает в атрибут объекта. Я пытался бросить небольшую распечатку «x» в среднем цикле, чтобы проверить, не попадал ли код в цикл. Код не распечатывался. –
Это была ошибка в моем soln, теперь исправлена. Также убедитесь, что вы заставляете эти элементы массивами с помощью XML :: Simple, например 'my $ data = XMLin ($ xml, ForceArray => ['custom-object', 'object-attribute']);' – CoffeeMonster