我有两组XML文档,一组是大写标签,另一组是小写,所以我试着编写一个Perl程序来小写第二组中的所有标签。
#!/usr/bin/perl
use strict;
use diagnostics;
use feature 'say';
my $filename;
my @filenames = glob ("*.xml");
my $FH;
my $lcCapture;
my $row;
my $match;
foreach $filename (@filenames) {
open ($FH, '<:encoding(UTF-8)', $filename)
or die "Could not open file '$filename' $!";
}
while ($row = <$FH>) {
chomp $row;
if ($row =~ m/(?:<\/?([A-Z]+)>)/) {
$match = $1;
$lcCapture = lc $match;
$match =~ s/$match/$lcCapture/g;
}
{no warnings;
print "$row\n";}
}
但我无法弄清问题可能是什么。我已经用XSLT解决了这个问题。但我希望我的Perl程序能够立即运行!
答案 0 :(得分:2)
通常,您应该使用XML解析器,但在像您这样的有限情况下,正则表达式可能会很好。您的问题是您在错误的变量上执行替换。变化:
$match =~ s/$match/$lcCapture/g;
为:
$row =~ s/$match/$lcCapture/g;
答案 1 :(得分:0)
您还可以使用Perl流编辑功能:
perl -pe 's/<\/?[^>]+>/\L$&/g' file.xml
此解决方案只会小写标记,而不是它们所包含的内容。