XML ::非渗漏简单
Perl(4)我最近一直在使用Perl和XML,而且 - 让我们只是说 - 有一个原因在我的简历上未列出Perl。那个说,开始后XML ::简单我一直很满意我能够用Perl和General Perl工作流程写的东西(有问题,从CPAN下载解决方案,插入胶水,重复)。所以这是一个使用XML ::简单的教程,对于那些不是Perl-fu的古代大师的人。
第一步是安装XML ::简单
来自CPAN。
perl-mcpan -e shell安装xml :: simple出口
好的简短纪念:为什么红宝石宝石和CPAN都感觉比使用更舒服Easy_install.
(Python解决方案)?我觉得自己喜欢和红宝石是只要社区到曾经像他们的模块存储库系统一样,它们彼此非常相似,但我并不完全肯定是如何特别不同的Easy_install.
。
这是简单的Easy_install.
稍后在语言的时间表中?(我甚至不确定,情况,但它肯定感觉像社区从未完全接受过它,或者接受一直在勉强。)我认为即使普通的LISP社区在统一ADSF后面也更成功:安装而不是Python,并且普通的LISP努力标准化几乎任何东西(没有标准实施的不可避免的后果)。
这只是::
?大家都会爱Easy_install.
如果我们写道导入DateTime :: DateTime
?也许这只是在我的脑海里。
基本上是XML :: SIMPL的确实是将XML转换为Perl数据结构,并使用非常简单的API将XML转换为XML。使用XML :: Simple的最困难的部分是对向量和哈希数据结构进行解除引用的工作理解。
现在让我们在磁盘中加载XML文件。
用XML ::简单的;用数据::拖车;我的$ XML=新的XML ::简单的;我的$ in.=$ XML- >Xmlin.('my_file.xml');打印拖车($ in.);
现在让我们创建一个数据结构并将其保存到磁盘。
用XML ::简单的;我的$ XML=新的XML ::简单的;我的$ OUT.={'An-Attribute'=>'属性值'那'另一个属性'=>'yada yada'那'类型'=>[“一种”那“b”那“C”],'人们'=>[{'名称'=>'将要'那'内容'=>'等等'},]};我的$ 12月='<?XML版本=“1.0”编码=“UTF-8”?>';打印$ XML- >XMLOUT.($ OUT.那XMLDECL.=>$ 12月那rootname.=>'随机的');
基本上有三种规则需要知道要创建所需的输出:
- 哈希中的标量是属性。
- 除非是关键
内容
,在这种情况下,它是元素的主要内容。 - 列表中的标量和哈希值表示为元素。
嗯,尽管解释了,它仍然是令人困惑的。通过该脚本查看XML输出可能更容易:
<?XML Version =“1.0”编码=“UTF-8”?>An-Attribute =“属性值”另一个属性=“亚达yada”><人名称=“将要”>等等人><类型>一种类型><类型>B.类型><类型>C类型>随机>
作为最后的示例,让我们抓取RSS Feed,提取它的信息并以不同的格式将其存储到磁盘。我们将抓住此博客的主要RSS Feed,它在转换为Perl后看起来像这样(有一些数据剥离空间约束):
$ var1={'版本'=>'2.0'那'渠道'=>{'关联'=>'//www.klytx.com/'那'lastbuilddate'=>'星期四,2008年11月06日10:48:35 -0600'那'语'=>'en-US'那'物品'=>[{'关联'=>'//www.klytx.com/entry/2008/nov/06/you-only-learn-the-first-time/'那'GUID'=>'//www.klytx.com/entry/2008/nov/06/you-only-learn-the-first-time/'那'标题'=>'你第一次学到'那'pubdate'=>'星期四,2008年11月06日10:48:35 -0600'那'描述'=>'完整的文章'}]}}
根据我们可以像这样写脚本。
用LWP ::简单的;用XML ::简单的;用数据::拖车;我的$ XML=新的XML ::简单的;我的$ Uri.='//www.klytx.com/feeds/all/';我的$ rss_xml.=$ XML- >Xmlin.(得到($ Uri.));我的@Articles.=();
Foreach.我的$文章(@{$ rss_xml.- >{渠道}- >{物品}}){我的$ A.={'标题'=>$文章- >{标题},'日期'=>$文章- >{p},'关联'=>$文章- >{关联}};推(@Articles.那$ A.);}
我的$ OUT.=$ XML- >XMLOUT.({'文章'=> span>@Articles.},rootname.=>“文章”);打印$ OUT.;
运行脚本的(截断)输出如下所示:
<文章><文章日期=“星期四,2008年11月10日10:48:35 -0600”链接=“//www.klytx.com/entry/2008/nov/06/you-only-learn-the-first-time/”标题=“你第一次学到”/><文章日期=“星期三,2008年11月08日08:00:00 -0600”链接=“//www.klytx.com/entry/2008/nov/05/bad-ideas-and-regular-expressions-in-templates/”标题=“模板中的错误思想和正则表达式”/><文章日期=“星期二,2008年11月10日10:38:10 -0600”链接=“//www.klytx.com/entry/2008/nov/04/deploying-django-with-fabric/”标题=“用面料部署Django”/><文章日期=“2008年11月03日星期一12:51:00 -0600”链接=“//www.klytx.com/entry/2008/nov/03/development-to-deployment-in-django/”标题=“在Django部署的发展”/><文章日期=“星期三,2008年10月29日10:11:54 -0600”链接=“//www.klytx.com/entry/2008/oct/29/creating-slideshows-with-cocos2d-iphone/”标题=“使用Cocos2D iPhone创建幻灯片”/><文章日期=“2008年10月27日星期一10:45:00 -0600”链接=“//www.klytx.com/entry/2008/oct/27/customize-site-style-by-user-with-django-userskins/”标题=“使用Django-Userskins自定义网站样式”/>文章>
我仍然非常缺乏经验和意识到我正在写一些像python-in-perl的东西,但我认为它令人印象深刻的是简洁的perl如何实现这些例程任务,以及CPAN促进的CPAN的速度如何促进一些库才能做典型的任务漂亮无痛。
到目前为止,在我进入Perl的旅程中,我唯一的投诉是,少数教程很少做好解释取消引用的语法,也许是因为它足够复杂它优雅自己的教程。这太糟糕了,Perl没有Python和Ruby对年轻程序员的性吸引力,这是一个有趣的工具。(虽然我不使用它以用于超出相当简单的脚本和服务的任何东西。)