【问题标题】:Need to get value from xml file using perl [closed]需要使用 perl 从 xml 文件中获取值 [关闭]
【发布时间】:2015-04-10 07:02:50
【问题描述】:

我有以下 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 方面做太多工作?指针会很有帮助。

【问题讨论】:

标签: xml perl parsing


【解决方案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

【讨论】:

    【解决方案2】:

    您可以使用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
    

    【讨论】:

      【解决方案3】:

      不要使用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>
      

      【讨论】:

        猜你喜欢
        • 2013-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-02
        • 2015-12-21
        相关资源
        最近更新 更多