【问题标题】:perl script to verify values present in xml filesperl 脚本来验证 xml 文件中存在的值
【发布时间】:2015-08-10 01:32:44
【问题描述】:

有50多个xml文件供我查看

<Number>50<Number> present in the xml file.

所有xml文件的标准格式都是一样的。示例如下:

<Employee>
    <EmployeeId>1</ EmployeeId >
    <DeptId>E</DeptId>
    <InternId>94</internId>
     <Number>10<Number>

1.我需要检查所有 50 个 xml 文件中 Number 的值。 2.需要从用户自己那里得到输入。例如:my $input = &lt;STDIN&gt;; 3.根据从用户收到的输入,必须检查所有xml文件中的值并打印值和文件名。

请帮忙。我是 Perl 的初学者。

我用过:

#!/usr/bin/perl
use strict; 
use warnings; 
sub main
{
 my $input = <STDIN>;
 print "You entered: $input";
}
main(); 

但不知道如何在获取 INPUT 后访问 xml 文件。 如何在目录中的所有文件中搜索节点并打印其值。

【问题讨论】:

  • 您需要用户输入什么样的“检查值”?您无需任何用户输入即可打印文件的值和名称。
  • 例如: 是来自用户的 并且在所有 xml 文件中搜索 并且 10 的值即 10 被打印出来并且不同对于所有 xml 值。所以必须打印来自 50 个 xml 值的 50 个值。
  • #!/usr/bin/perl @files = glob ("C: Perl/*.xml"); foreach $file (@files) { open (FILE, "$file"); while($line= ){ print "$line" if $line =~ /Number/; } 关闭文件; } 此代码返回空结果。请帮忙
  • 我猜您的glob 不会返回您认为的结果。在上面的第一个分号之后,添加print "files are: @files\n";,看看你是否得到了你所期望的。此外,将open (FILE, "$file"); 替换为open (FILE, $file) || die "Can not open $file for reading ($!)";,看看是否有任何错误。
  • 当我更改并运行代码时:结果是:全局符号“$line”需要在 file.pl 第 11 行显示明确的包名称。file.pl 的执行由于编译错误而中止。不知道是什么问题。某处“如果 $line =~ /Number/”是个问题。请帮忙。

标签: xml perl file for-loop


【解决方案1】:

我会选择这样的:

#!/usr/bin/perl

use strict;
use warnings;

my $dir_to_search = "/path/to_xml/files/";

print "Please enter a search term for the 'Number' field:";
my $input = <STDIN>;
chomp $input;
$input = quotemeta $input;    #avoid regex injection

foreach my $file ( glob "$dir_to_search/*.xml" ) {
    my $twig = XML::Twig->new(
        'pretty_print'  => 'indented_a',
        'twig_handlers' => {
            'Number' => sub {
                if ( $_->text_only =~ m/^$input$/ ) {
                    print "$file contains ", $_->print,"\n";
                }
            }
        }
    );
    $twig->parsefile($file);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    相关资源
    最近更新 更多