我有一個XML文件,看起來像這樣,我希望檢索RAM的值。我很新的perl。任何幫助,將不勝感激。使用Perl讀取XML文件
<hardware>
<computer OS="Linux" ENV="DEV">2GB</computer>
<computer OS="windows" ENV="QA">3GB</computer>
</hardware>
它更像是一個查詢檢索value.eg:「perl的myscript.pl Linux開發」應該給我「2GB」作爲輸出。
我有一個XML文件,看起來像這樣,我希望檢索RAM的值。我很新的perl。任何幫助,將不勝感激。使用Perl讀取XML文件
<hardware>
<computer OS="Linux" ENV="DEV">2GB</computer>
<computer OS="windows" ENV="QA">3GB</computer>
</hardware>
它更像是一個查詢檢索value.eg:「perl的myscript.pl Linux開發」應該給我「2GB」作爲輸出。
F你只需要獲得XML標籤內的值,可以使用一個簡單的正則表達式匹配:如果你要處理的整個XML結構(如你應該做的)
foreach (split(/\n/,$xmltext))
{
print "$1\n" if /<computer.*>(.*)<\/computer>/;
}
,使用XML模塊像XML解析器::
MOD:
對於查詢般的搜索,你必須使用一個XML解析器,例如:
#!/usr/bin/perl -w
use strict;
use warnings;
use XML::Bare;
my $parser = new XML::Bare(file => "ram.xml");
print $_->{value}."\n" foreach (@{$parser->find_by_perl($parser->parse()->{hardware}->{computer}, "(-OS eq '$ARGV[0]') && (-ENV eq '$ARGV[1]')")});
這將列出所有值符合您的條件
使用XML::LibXML
:
use strict;
use warnings;
use feature qw(say);
use XML::LibXML;
die "Usage: $0 <OS> <ENV>\n" if @ARGV != 2;
my ($os, $env) = @ARGV;
my $xml = XML::LibXML->load_xml(IO => \*DATA);
say $xml->findvalue(qq{//computer[\@OS = "$os"][\@ENV = "$env"]})
__DATA__
<hardware>
<computer OS="Linux" ENV="DEV">2GB</computer>
<computer OS="windows" ENV="QA">3GB</computer>
</hardware>
或者使用XML::Twig
:
use strict;
use warnings;
use feature qw(say);
use XML::Twig;
die "Usage: $0 <OS> <ENV>\n" if @ARGV != 2;
my ($os, $env) = @ARGV;
my $t = XML::Twig->new(
twig_handlers => {
qq{//computer[\@OS="$os" and \@ENV="$env"]} => sub { say $_->text() },
},
);
$t->parse(do {local $/; <DATA>});
__DATA__
<hardware>
<computer OS="Linux" ENV="DEV">2GB</computer>
<computer OS="windows" ENV="QA">3GB</computer>
</hardware>
輸出:
$ perl script.pl Linux DEV
2GB
使用的XML解析庫樣['XML :: LibXML'](https://metacpan.org/pod/ XML :: LibXML)或['XML :: Twig'](https://metacpan.org/pod/XML::Twig) – Zaid 2014-08-27 09:05:22
...或['XML :: Rabbit'](https:// metacpan。 org/pod/XML :: Rabbit)(我已經使用過它並且非常喜歡它),或者[Task :: Kensho中列出的模塊之一](https://metacpan.org/pod/Task :: Kensho#Task :: Kensho :: XML:-XML-Development)或[某些其他模塊](https://metacpan.org/search?q=xml)。 – Biffen 2014-08-27 09:19:55