Скриптовое решение для создания ресурса записи данных из XML

Недавно я получил задание по созданию сценариев для создания записей ресурсов Data Capture из онлайн-канала XML.

Это не то, что я делал раньше, и был бы признателен, если бы кто-нибудь мог предложить какие-то ключевые моменты, о которых я должен знать, любое предварительное чтение, на которое я мог бы взглянуть, или любые другие вопросы или "подводные камни", которые я должен принять во внимание. рассмотрение при этом. Терминология, которая может быть специфичной для этого типа задач, также будет большой помощью.

В идеале я хотел бы добиться этого с помощью JQuery, или, если было бы проще выполнить задачу, использовать Perl. Мои знания JQuery лучше, чем мои знания Perl.

Моя цель - взять из Интернета очень большой XML-канал, состоящий из нескольких узловых элементов, состоящих из разнообразного контента. Пример XML ниже.

<response>
<result name="response" numFound="3559" start="0">
    <doc>
        <str name="PID">islandora:4466</str>
        <arr name="dc.coverage">
            <str>4466</str>
        </arr>
        <arr name="dc.description">
            <str>
                Text
            </str>
            <str>
                <p><iframe src="http:" width="230" height="230" frameborder="0" allowtransparency="65535" scrolling="auto"></iframe></p>
                <p><a href="/assets/.....">Transcript (DOC, 150KB)  </a></p>
            </str>
        </arr>
        <arr name="dc.identifier">
            <str>islandora:4466</str>
        </arr>
        <arr name="dc.subject">
            <str>heav422</str>
            <str>heav533</str>
            <str>heav547</str>
            <str>heav549</str>
            <str>discipline1137</str>
            <str>theme778</str>
        </arr>
        <str name="dc.title">Text</str>
        <arr name="hea.abstract">
            <str> <!-- HTML ready content (example below) -->
                <p>Text</p>
                    <ul>
                        <li>Text</li>
                        <li>Text</li>
                        <li>Text</li>
                        <li>Text</li>
                        <li>Text</li>
                        <li>Text</li>
                        <li>Text</li>
                    </ul>
                <p>Text</p>
            </str>
        </arr>
        <arr name="hea.date">
            <str>2012-05-01 00:00:00</str>
        </arr>
        <arr name="hea.discipline">
            <str>1137</str>
        </arr>
        <arr name="hea.heav">
            <str>422</str>
            <str>533</str>
            <str>547</str>
            <str>549</str>
        </arr>
        <str name="hea.resource_type">808</str>
        <arr name="hea.theme">
            <str>778</str>
        </arr>
        <arr name="hea.title">
            <str>Text</str>
        </arr>
        <date name="timestamp">2013-11-07T08:12:22.684Z</date>
    </doc>
</result>
</response>

В идеале я хотел бы разработать что-то, что позволило бы разбить исходный большой XML на отдельные XML-файлы для использования в качестве записей для сбора данных.

Сначала я подумал о том, что я мог бы использовать JQuery $.parseXML, чтобы разделить исходный XML на отдельные записи, а затем сохранить каждый как отдельный файл.XML, прежде чем поместить их в мою рабочую CMS и преобразовать их в DCR (используя функциональные возможности CMS).

Я немного посмотрел в Интернете, и, кажется, есть много более сложных способов сделать это, и в идеале я был бы признателен за любые рекомендации относительно того, как это сделать.

Я впервые попробую что-то подобное, и у меня будет крайний срок, который учитывает это. Так что в идеале, если кто-то может предложить какие-либо, советы или дополнительные советы, я был бы признателен Это моя начальная стадия исследования, так что пока я не начал пытаться найти решение.

Если я пропустил что-то, что вы хотели бы узнать, чтобы лучше посоветовать, пожалуйста, спросите, и я постараюсь опубликовать ответ как можно скорее.

Спасибо за взгляд и любые советы, которые даны.

** Интересно узнать, почему это было отмечено без каких-либо комментариев, почему?

Дэн

2 ответа

Вы можете использовать xml_split, который является частью XML::Twig, чтобы сделать это. Если инструмент не делает то, что вы хотите, вы можете использовать сам XML::Twig, чтобы разбить исходный файл так, как вы хотите. Модуль предназначен для обработки больших файлов.

Другим решением Perl является использование XML:: LibXML, особенно интерфейса считывателя в XML:: LibXML:: Reader.

Для больших файлов рекомендуется потоковый анализ. Сейчас вас интересуют только некоторые теги, и размер файла огромен (не помещается в память).

Вот некоторые чтения: http://coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/55

Модуль CPAN: http://metacpan.org/pod/XML::Twig

Пример:

use XML::Twig;
use Data::Dumper;

my $xml=<<ENDOFXML;
... your xml here ...

ENDOFXML

my $index = 0;
my $t= XML::Twig->new( 
                    twig_roots => { 'doc' => 1},
                    no_prolog => 0,
                    twig_handlers => 
                        { doc => \&print_n_purge,                          
                        },
                        pretty_print => 'indented',
                     );
$t->parse($xml);

sub print_n_purge 
  { my( $t, $elt)= @_;
   $index++;
   my $filename = "out-$index.xml";
   open(my $fh,'>',$filename) or die $!;
   $t->flush($fh);          
   close($fh);
   print "created $filename\n";
  }
Другие вопросы по тегам