小写XML标签

时间:2016-03-04 21:05:51

标签: xml perl

我有两组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程序能够立即运行!

2 个答案:

答案 0 :(得分:2)

通常,您应该使用XML解析器,但在像您这样的有限情况下,正则表达式可能会很好。您的问题是您在错误的变量上执行替换。变化:

$match =~ s/$match/$lcCapture/g;

为:

$row =~ s/$match/$lcCapture/g;

答案 1 :(得分:0)

您还可以使用Perl流编辑功能:

perl -pe 's/<\/?[^>]+>/\L$&/g' file.xml

此解决方案只会小写标记,而不是它们所包含的内容。