[Perl] 读取XML值 -- XML::Simple/Data::Dumper
2014-05-07 17:44
645 查看
分享新手初次接触xml文件读取的经历,不废话了,走你
假如有 xml文件如下:
xml文件结构一目了然,user/passwd/books 三个标签,怎么调用呢,这就要用到XML::Simple 和Data::Dumper
先用dumper解析xml文件,Perl代码
ForceArray => 1一定要,具体什么意思你再查下,告诉我。
运行结果如下如下:
清楚吧,这个效果你可以和原xml文件对比着看,等会儿有用。假如你要用passwd的值怎么办,最简单,perl代码
要是少写[0]的话会得到返回值ARRAY(0x27a016c)而不是我们想要的passwd,为什么?我在学习下,新手的必经之路。
怎么用user值呢,发现有俩user,或者说标签嵌套了两层,perl代码
这就会返回user1,user2的值,你可以和passwd的调用方法对比下
怎么用book值呢,发现有仨book,而且标签栏内有属性值,这个就又不一样了,perl代码
想使用属性值比如 author啊,title啊,可以看第一行第二行,但是 如果要用标签值就看第三行 ->{content}, 这个content 字样是用dumper解析后出来的,尝试了下可以,或者你有更简单的办法,经验啥的分享出来。
还有个同名的book标签,怎么用呢,perl代码
总的Perl代码
看了这个之后不管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 嵌套多深,或者属性值有多少,上面的方法应该可以让你调用了,新手分享,高手莫见怪。
欢迎提出问题~
相关文章推荐
- XML::Simple与Data::Dumper在Perl中的使用
- XML::Parser module installlibxml-simple-perl
- cacti 安装perl 和XML::Simple
- Android之读取 AndroidManifest.xml 中的数据:版本号、应用名称、自定义K-V数据(meta-data)
- Android之读取 AndroidManifest.xml 中的数据:版本号、应用名称、自定义K-V数据(meta-data)
- Android之读取 AndroidManifest.xml 中的数据:版本号、应用名称、自定义K-V数据(meta-data)
- perl使用xml::simple来读写xml
- [Perl]用XML::Simple解析XML文件
- android 读取 AndroidManifest.xml 中的数据:版本号、应用名称、自定义K-V数据(meta-data)
- XmlDataDocument----从XmlDataDocument读取XML
- Extjs4.2 grid datastore读取xml和json
- dom4j 读取xml 数据库配置文件 dataconfig
- 使用 Perl 的 XML::Simple 解析 XML 文档
- ASPX 如何读取 AppData 目录下面的XML (C#实现)
- 用perl XML::Simple解析XML文件
- [Perl]用XML::Simple解析XML文件
- Android之读取 AndroidManifest.xml 中的数据:版本号、应用名称、自定义K-V数据(meta-data)
- Perl输出复杂数据结构:Data::Dumper,Data::Dump,Data::Printer
- Perl Data::Dumper模块介绍