我有以下xml文件strings.xml
。我需要从{
}获取值1.0.0.44
<string name="app_version">1.0.0.44</string>
我怎样才能使用XML :: Simple?
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="drawer_item_text">Drawer Item</string>
string name="drawer_image_desc">Icon for the Navigation drawer item</string>
<string name="app_version">1.0.0.44</string>
<string name="module_version_no">1.0.1.20</string>
我没有在使用Perl进行XML解析方面做太多工作?指针将是一个很好的帮助。
答案 0 :(得分:1)
使用XML :: LibXML;
use v5.16;
use XML::LibXML;
my $dom = XML::LibXML->load_xml(IO => *DATA{IO});
say $dom->findvalue('//string[@name="app_version"]');
__DATA__
<resources>
<string name="drawer_item_text">Drawer Item</string>
<string name="drawer_image_desc">Icon for the Navigation drawer item</string>
<string name="app_version">1.0.0.44</string>
<string name="module_version_no">1.0.1.20</string>
</resources>
输出1.0.0.44
答案 1 :(得分:1)
您可以使用XML::Twig
use warnings;
use strict;
use XML::Twig;
my $twig = XML::Twig->new();
$twig->parsefile('test.xml');
print $twig->findvalue('string[@name="app_version"]');
输出是:
1.0.0.44
答案 2 :(得分:0)
不要使用XML::Simple
:
不鼓励在新代码中使用此模块。其他模块可用,提供更直接和一致的接口
我会建议XML::Twig
。 (作为已发布的XML::LibXML
解决方案的替代方案):
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
sub process_string {
my ( $twig, $string ) = @_;
if ( $string->att('name') eq 'app_version' ) {
print $string ->text, "\n";
}
}
my $twig = XML::Twig->new(
'pretty_print' => 'indented',
'twig_handlers' => { 'string' => \&process_string },
);
$twig->parse( \*DATA );
__DATA__
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="drawer_item_text">Drawer Item</string>
<string name="drawer_image_desc">Icon for the Navigation drawer item</string>
<string name="app_version">1.0.0.44</string>
<string name="module_version_no">1.0.1.20</string>
</resources>