[Perl] 读取XML值 -- XML::Simple/Data::Dumper

分享新手初次接触xml文件读取的经历,不废话了,走你

假如有 xml文件如下:

<config>
	<user>
		<user1>user1_t</user1>
		<user2>user2_t</user2>
	</user>
	<passwd>longNails</passwd>
	<books>
		<book author="author_1" title="title_1">book_1_content</book>
		<book author="author_2" title="title_2">book_2_content</book>
		<book author="author_3" title="title_3">book_3_content</book>
	</books>
	<books>books2</books>
</config>

xml文件结构一目了然,user/passwd/books 三个标签,怎么调用呢,这就要用到XML::Simple 和Data::Dumper

先用dumper解析xml文件,Perl代码

#!perl -w
use XML::Simple;
use Data::Dumper;

$xml = XMLin('f_xml.xml', ForceArray => 1);
print Dumper($xml);


ForceArray => 1一定要,具体什么意思你再查下,告诉我。

运行结果如下如下:

$VAR1 = {
          'passwd' => [
                      'passwd'
                    ],
          'user' => [
                    {
                      'user1' => [
                                 'user1_t'
                               ],
                      'user2' => [
                                 'user2_t'
                               ]
                    }
                  ],
          'books' => [
                     {
                       'book' => [
                                 {
                                   'content' => 'book_1_content',
                                   'title' => 'title_1',
                                   'author' => 'author_1'
                                 },
                                 {
                                   'content' => 'book_2_content',
                                   'title' => 'title_2',
                                   'author' => 'author_2'
                                 },
                                 {
                                   'content' => 'book_3_content',
                                   'title' => 'title_3',
                                   'author' => 'author_3'
                                 }
                               ]
                     },
                     'books2'
                   ]
        };


清楚吧,这个效果你可以和原xml文件对比着看,等会儿有用。假如你要用passwd的值怎么办,最简单,perl代码

print $xml->{passwd}[0]."\n";


要是少写[0]的话会得到返回值ARRAY(0x27a016c)而不是我们想要的passwd,为什么?我在学习下,新手的必经之路。

怎么用user值呢,发现有俩user,或者说标签嵌套了两层,perl代码

print $xml->{user}[0]->{user1}[0]."\n";
print $xml->{user}[0]->{user2}[0]."\n";

这就会返回user1,user2的值,你可以和passwd的调用方法对比下

怎么用book值呢,发现有仨book,而且标签栏内有属性值,这个就又不一样了,perl代码

print $xml->{books}[0]->{book}[0]->{author}."\n";
print $xml->{books}[0]->{book}[0]->{title}."\n";
print $xml->{books}[0]->{book}[2]->{content}."\n";

想使用属性值比如 author啊,title啊,可以看第一行第二行,但是 如果要用标签值就看第三行 ->{content}, 这个content 字样是用dumper解析后出来的,尝试了下可以,或者你有更简单的办法,经验啥的分享出来。


还有个同名的book标签,怎么用呢,perl代码


print $xml->{books}[1];
简单吧,下标改改就行

总的Perl代码

#!perl -w
use XML::Simple;
use Data::Dumper;

$xml = XMLin('f_xml.xml', ForceArray => 1);
print Dumper($xml);
print $xml->{passwd}[0]."\n";
print $xml->{user}[0]->{user1}[0]."\n";
print $xml->{user}[0]->{user2}[0]."\n";
print $xml->{books}[0]->{book}[0]->{author}."\n";
print $xml->{books}[0]->{book}[0]->{title}."\n";
print $xml->{books}[0]->{book}[2]->{content}."\n";
print $xml->{books}[1];


看了这个之后不管xml 嵌套多深,或者属性值有多少,上面的方法应该可以让你调用了,新手分享,高手莫见怪。

欢迎提出问题~



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值