首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从XML创建资源数据捕获记录的脚本化解决方案

问从XML创建资源数据捕获记录的脚本化解决方案
EN

Stack Overflow用户
提问于 2014-01-09 19:17:12
回答 2查看 176关注 0票数 2

我最近的任务是创建一个脚本化解决方案,以便从在线XML提要创建资源数据捕获记录。

这不是我以前做过的事情,如果有人能提供任何我应该知道的关键点,任何我可以看看的背景读物,或者任何其他我在做这件事时应该考虑的问题或‘陷阱’,我将不胜感激。可能特定于这类任务的术语也会有很大帮助。

理想情况下,我希望使用JQuery来实现这一点,或者,如果这项任务更容易完成,可以使用Perl。不过,我的JQuery知识比Perl知识要好。

我的目标是从在线获取一个非常大的XML提要,它由多个节点元素组成,这些节点元素包含各种内容。下面是XML的一个示例。

代码语言:javascript
复制
<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文件,然后将它们放入我的工作内容管理系统并将其转换为DCR(使用内容管理系统的功能)。

我已经做了一些网上查找,似乎有很多更复杂的方法来做到这一点,理想情况下,我将感谢任何关于如何做到这一点的指导。

这是我第一次尝试这样的事情,并且有一个考虑到这一点的最后期限。因此,理想情况下,如果任何人能提出任何建议,提示或额外阅读,我将不胜感激。这是我的初步研究阶段,所以到目前为止,我还没有开始尝试提出解决方案。

如果我遗漏了任何您想知道的更好的建议,请询问,我将努力尽快发布答案。

感谢您的关注和任何给出的建议。

**好奇地想知道为什么这会被标记下来,而没有任何关于原因的评论?

丹

EN

回答 2

Stack Overflow用户

发布于 2014-01-09 23:04:57

您可以使用XML::Twig的一部分xml_split来完成此操作。如果该工具不能完成您想要的操作,您可以使用XML::Twig本身来按您想要的方式分解原始文件。该模块旨在处理大文件。

另一种Perl解决方案是使用XML::LibXML,特别是XML::LibXML::Reader中的读取器接口。

票数 1
EN

Stack Overflow用户

发布于 2014-01-13 20:35:16

对于大文件,建议使用流样式解析。现在你只对一些标签感兴趣,而且文件很大(内存放不下)。

下面是一些读物:http://coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/55

CPAN模块:http://metacpan.org/pod/XML::Twig

示例:

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

https://stackoverflow.com/questions/21018676

复制
相关文章

相似问题

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