0

次の文字列に置き換える必要があります。

<book name=""
      author="">

<magazine>

以下の私のコードは機能しません:

sub substitution
{
my $find = "book name\=\"\"\nauthor\=\"\"";
my $replace = "magazine";
{  
local @ARGV = ("$_[0]");
local $^I = '.bac';

while( <> )
{
  if( s/$find/$replace/ig ) {
     print;
                            }

else {
     print;
     }
} //while
}
4

4 に答える 4

3

Brian が既に述べたように、XML パーサーを使用します。XML::LibXML を使用し、setNodeName (要素名を変更するため) と removeAttributes (2 つの属性を削除するため) を使用して DOM 操作を行うサンプルを次に示します。

use strict;
use XML::LibXML;

my $doc = XML::LibXML->new->parse_string(<<EOF);
<books>
 <book name=""
       author="">
  <chapter>something</chapter>
 </book>
 <book name=""
       author="">
  <chapter>something</chapter>
 </book>
</books>
EOF

for my $book_node ($doc->findnodes('//book')) {
    $book_node->setNodeName('magazine');
    $book_node->removeAttribute($_) for qw(name author);
}

print $doc->serialize;

別の可能性は、ここで xslt を使用することです...

于 2013-07-10T09:03:26.430 に答える