2014-09-04 46 views
-2

下面的標籤在該文件中的格式相同,並沒有很好地形成 我想用我的自定義文本替換用戶標籤內標籤與名稱測試的替代內容。 在Perl中不能使用xml解析器,因爲它不是純粹的xml。Perl的正則表達式到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

使用正則表達式來解析XML不是一個好主意。你有沒有考慮過使用XML解析器? – TLP 2014-09-04 03:43:14

+0

「並沒有很好地形成」? XML恰恰相反。 – fenway 2014-09-04 03:46:13

+0

是其不能很好formed..I意味着有多個根沒有單根present.I不得不使用正則表達式來解析it.Its不是純粹的XML。 – tonystark 2014-09-04 04:14:22

回答

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; 
       }  
      } 
     } 
相關問題