我在Red Hat Linux中运行以下命令:
perl -ne '
print "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
while(/(<PRINTKIT FORM_ID=\"PP_WELCOMEKIT\">.*?<\/PRINTKIT>)/g){
print "<sf><XDF>$1</XDF></sf>"
};
' $1 > $2.$TS2.postscrub
Run Code Online (Sandbox Code Playgroud)
$2是一个文件名,$TS2只是一个日期.
目前它打印出100行
<?xml version=\"1.0\" encoding=\"utf-8\"?>
Run Code Online (Sandbox Code Playgroud)
当我真的不想让它打印任何一个.
有人可以更改上面的代码来做它正在做的一切,除了不再打印<?xml version=\"1.0\" encoding=\"utf-8\"?>了吗?我已经尝试过删除带有该行的print语句,如下所示:
perl -ne '
while(/(<PRINTKIT FORM_ID=\"PP_WELCOMEKIT\">.*?<\/PRINTKIT>)/g){
print "<sf><XDF>$1</XDF></sf>"
};
' $1 > $2.$TS2.postscrub
Run Code Online (Sandbox Code Playgroud)
这样做会使它输出一个0字节的文件,所以我知道它不起作用.
真的 - 请不要使用正则表达式进行操作XML.这是非常令人讨厌的,正如你所发现的那样 - 容易被莫名其妙地打破.
尝试这样的事情(我猜测了你的样本数据).
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Twig;
sub replace_printkit {
my ( $twig, $pk ) = @_;
my $sf = $twig->root->insert_new_elt('sf');
$sf->insert_new_elt( 'XDF', $pk->trimmed_text );
$pk->delete;
}
my $twig = XML::Twig->new(
'pretty_print' => 'indented',
'twig_handlers' => { 'PRINTKIT' => \&replace_printkit }
);
$twig->parse( \*DATA );
$twig->set_xml_version('1.0');
$twig->set_encoding('utf-8');
$twig->print;
__DATA__
<xml>
<PRINTKIT FORM_ID="PP_WELCOMEKIT">some_stuff_here</PRINTKIT>
</xml>
Run Code Online (Sandbox Code Playgroud)
这打印:
<?xml version="1.0" encoding="utf-8"?>
<xml>
<sf>
<XDF>some_stuff_here</XDF>
</sf>
</xml>
Run Code Online (Sandbox Code Playgroud)
您可能需要稍微修改它以输入数据.
编辑:
当你使用$ twig-> print时,我可以把它放到一个文件中吗?如果是这样,命令是什么?
open ( my $output_fh, '>', "new_file.xml" ) or die $!;
print {$output_fh} $twig -> sprint;
close ( $output_fh );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |