perl正则表达式替换xml标记内容的内容

时间:2014-09-04 03:31:22

标签: regex perl xml-parsing

以下标记在文件中的格式相同,格式不正确 我想用自定义文本替换名称test中的用户标记内的标记。 perl中的xml解析器不能使用,因为它不是纯xml。

   <user name="test">
       <option name="test2">dev</option>
       <option name="test3">csm></option>
    </user> 
    <user name="test12">
       <option name="test21">dev1</option>
       <option name="test31">csm1></option>
    </user> 

1 个答案:

答案 0 :(得分:0)

这就是我设法做到的。

 open(FILE,"<","menu1.xml");
     open(OUT,">","menu12.xml");
             my @values = split('\n', $data);
    my $ind = 0;

    my $arraysize = @values;

     while (($input = <FILE>)) 
        {
          print OUT $input;
            if($input =~ m/<menu name="">/)
            {
            while (defined($input = <FILE>) && ($input !~ m/<\/menu>/))
            {
            print OUT $input;
            if ($input =~ m/.+user name="(.*)">/ && $1 eq $access_type)
             {
                while (defined($input = <FILE>) && ($input !~ m/<\/user>/))
                 {

                        if($ind < $arraysize)
                        {
                        $input =~ s/<(.*) name="(.*)">(.*)<\/(.*)>/$values[$ind]/;
                        print OUT $input;   
                        $ind = $ind+1;
                        }


                 }
                if($input =~ m/<\/user>/)   
                    {
                     print OUT $input;
                    }           
             }  
            }
              if($input =~ m/<\/menu>/)  
              {
                print OUT $input;
              }       
           }
      }