【发布时间】: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 = <STDIN>;
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/”是个问题。请帮忙。