考虑到 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>
关于xml - 如何使用 Perl 的 XML::Simple 从 XML 文件中提取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3770813/