考虑到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”,表名=“propertytables”#输出B1,B2
答案 0 :(得分:3)
XML :: Simple是唯一用于此角色的模块。对于这样的事情,我会使用带有一点XPath的XML :: LibXML。
但是如果你想使用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>
答案 1 :(得分:2)
$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' ] );
检查结构以查看路径是什么。