[英]How can I extract values from an XML file with Perl's XML::Simple?
考虑到XML :: Simple是唯一可以使用的模块,我只能从XML中检索值。 结构如下:
<testxml>
<dev>
<A>
<tables>
<datatables>
<table>a1</table>
<table>a2</table>
<table>a3</table>
</datatables>
<propertytables>
<table>A1</table>
<table>A2</table>
</propertytables>
</tables>
</A>
<B>
<tables>
<datatables>
<table>b1</table>
<table>b2</table>
</datatables>
<propertytables>
<table>B1</table>
<table>B2</table>
</propertytables>
</tables>
</B>
</dev>
</testxml>
XMLOut是:
<opt>
<dev name="A">
<tables name="datatables">
<table>a1</table>
<table>a2</table>
<table>a3</table>
</tables>
<tables name="propertytables">
<table>A1</table>
<table>A2</table>
</tables>
</dev>
<dev name="B">
<tables name="datatables">
<table>b1</table>
<table>b2</table>
</tables>
<tables name="propertytables">
<table>B1</table>
<table>B2</table>
</tables>
</dev>
</opt>
我如何检索表数组说这种情况:
dev name =“ B”和表name =“ propertytables”#输出B1,B2
XML :: Simple是用于此角色的唯一模块并不是真的。 对于这样的事情,我将XML :: LibXML与XPath一起使用。
但是,如果要使用XML :: Simple,我发现最好的方法是使用Data :: Dumper转储XML :: Simple构建的数据结构,并使用该转储找出遍历该结构的最佳方法。 就您而言,这很简单。
#!/usr/bin/perl
use strict;
use warnings;
use XML::Simple;
use Data::Dumper;
my $xml = do { local $/; <DATA> };
my $doc = XMLin($xml);
# print Dumper $doc;
my $dev = 'B';
my $table = 'propertytables';
foreach (@{$doc->{dev}{$dev}{tables}{$table}{table}}) {
print "$_\n";
}
__END__
<opt>
<dev name="A">
<tables name="datatables">
<table>a1</table>
<table>a2</table>
<table>a3</table>
</tables>
<tables name="propertytables">
<table>A1</table>
<table>A2</table>
</tables>
</dev>
<dev name="B">
<tables name="datatables">
<table>b1</table>
<table>b2</table>
</tables>
<tables name="propertytables">
<table>B1</table>
<table>B2</table>
</tables>
</dev>
</opt>
$ref->{dev}{B}{tables}{propertytables}{table}
将作为参考
@{ $ref->{dev}{B}{tables}{propertytables}{table} }
将是列表。
但是真的
my $ref = XMLin( $some_source );
use Smart::Comments;
### $ref
# ... OR ...
use Data::Dumper;
print Data::Dumper->Dump( [ $ref ], [ '*ref' ] );
检查结构以查看路径。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.