【问题标题】:perl regular expression to substitute content of a xml tag contentperl 正则表达式替换 xml 标记内容的内容
【发布时间】:2014-10-28 16:38:12
【问题描述】:

以下标签在文件中的格式相同,格式不正确 我想用我的自定义文本将用户标签内的标签替换为名称测试。 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> 

【问题讨论】:

  • 使用正则表达式解析 XML 不是一个好主意。您是否考虑过使用 XML 解析器?
  • “格式不正确”? XML 正好相反。
  • 是的,它的格式不正确..我的意思是有多个根,没有一个根存在。我不得不使用正则表达式来解析它。它不是纯 XML。
  • @fenway 它不是纯 xml。我有一个文件,其中配置是以这种格式编写的。
  • 请不要将其标记为否定。这是一个有效的问题

标签: regex perl xml-parsing


【解决方案1】:

这就是我设法做到的。

 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;
              }       
           }
      }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-04
    • 2018-01-07
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 2017-02-21
    • 2010-10-01
    • 1970-01-01
    相关资源
    最近更新 更多