考虑到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”和tables 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>