使用perl获取xml属性值

使用perl获取xml属性值,xml,regex,perl,Xml,Regex,Perl,我对Perl脚本非常熟悉。我需要帮助获取total alarms的XML属性值(在本例中为11) 有什么想法吗?这里有一种使用XML::Twig模块的方法: #!/usr/bin/env perl use warnings; use strict; use XML::Twig; my $twig = XML::Twig->new( twig_roots => { '/alarm-response-list' => sub { printf qq|%s

我对Perl脚本非常熟悉。我需要帮助获取total alarms的XML属性值(在本例中为11)


有什么想法吗?

这里有一种使用
XML::Twig
模块的方法:

#!/usr/bin/env perl

use warnings;
use strict;
use XML::Twig;

my $twig = XML::Twig->new(
    twig_roots => {
        '/alarm-response-list' => sub { printf qq|%s\n|, $_->att('total-alarms') },
    },  
)->parsefile(shift);
像这样运行:

perl script.pl xmlfile
这将产生:

11

这里有一种使用
XML::Twig
模块的方法:

#!/usr/bin/env perl

use warnings;
use strict;
use XML::Twig;

my $twig = XML::Twig->new(
    twig_roots => {
        '/alarm-response-list' => sub { printf qq|%s\n|, $_->att('total-alarms') },
    },  
)->parsefile(shift);
像这样运行:

perl script.pl xmlfile
这将产生:

11

XPath表达式不匹配,因为您在XML文档中指定了命名空间:

<alarm-response-list xmlns="url.com" ...
  • 在XPath中使用该名称空间,例如

    my ($alarms) = $xc->findvalue('//a:alarm-response-list/@total-alarms');
    

  • 现在,这将按预期提取属性值。

    您的XPath表达式不匹配,因为您在XML文档中指定了名称空间:

    <alarm-response-list xmlns="url.com" ...
    
  • 在XPath中使用该名称空间,例如

    my ($alarms) = $xc->findvalue('//a:alarm-response-list/@total-alarms');
    

  • 现在,这将按预期提取属性值。

    如何将值保存在匿名子例程之外的变量中?在解析之前声明一个变量,并在处理程序中分配给它。闭包的魔力将使它工作。我如何将值保存在匿名子例程之外的变量中?在解析之前声明一个变量,并在处理程序中分配给它。闭包的魔力将使它发挥作用。