Perl用于在ActivePerl中查找节点并获取子节点

时间:2017-05-18 15:53:47

标签: xml perl activeperl

我有一个Perl程序来解析输入XML文件并将值打印到输出文本文件。

当我使用DWIM Perl GUI构建时似乎工作正常,但是当我使用ActivePerl构建它时,由于缺少库而失败。

有人可以帮助我将代码转换为ActivePerl等效代码吗?

Perl代码是

use strict;
use warnings;

use XML::LibXML;

open( my $File, '>', 'options.txt' );

my $filename = $ARGV[0];

my $parser = XML::LibXML->new();
my $xmldoc = $parser->parse_file( $filename );

for my $sample ( $xmldoc->findnodes( '/Releases/Release' ) ) {

    foreach my $child ( $sample->getChildnodes ) {

        if ( $child->nodeType() == XML_ELEMENT_NODE ) {
            print $File $child->textContent(), " ";
        }
    }

    print $File "\n";
}

我的输入就像(在XML中)

<!-- Pre-Seed File for Script Generation -->
<Releases>
  <Release>
    <Family>F1L</Family>
    <ArVersion>3.2.2</ArVersion>
    <ReleaseVersion>C3.03.10.001</ReleaseVersion>
    <PackageType>FULL</PackageType>
  </Release>
  <Release>
    <Family>F1H</Family>
    <ArVersion>4.0.3</ArVersion>
    <ReleaseVersion>Ver4.03.20</ReleaseVersion>
    <PackageType>SPAL</PackageType>
  </Release>
</Releases>

输出应为

F1L 3.2.2 C3.03.10.001 FULL 
F1H 4.0.3 Ver4.03.20 SPAL 

3 个答案:

答案 0 :(得分:1)

不需要“Activeperl等效”。 Perl代码是跨平台的。您的代码在Active Perl下运行良好。您只需要安装缺少的库。这个网站上有很多答案可以帮助你。

答案 1 :(得分:0)

&#34;我有一个activeperl许可证&#34; 你不需要ActivePerl许可证 - Perl是开源免费的,除非你已经分发了每年$ 1,000&#34;商业版&#34;

你应该在你的ActivePerl上安装XML::LibXML,或者你应该继续使用DWIMPerl(基本上是带有一些额外模块的Strawberry Perl)。如果您正在使用ActiveState的Komodo,那么它应该适用于任何当前的Perl

答案 2 :(得分:0)

ActivePerl不是一种语言;它是一个Perl发行版。代码将在ActivePerl上正常运行。

>perl -v | perl -ne"print if /This|provided/"
This is perl 5, version 16, subversion 3 (v5.16.3) built for MSWin32-x64-multi-thread
Binary build 1603 [296746] provided by ActiveState http://www.ActiveState.com

>perl a.pl a.xml

>type options.txt
F1L 3.2.2 C3.03.10.001 FULL
F1H 4.0.3 Ver4.03.20 SPAL