用于多寄存器嵌套标记的Perl XML编辑
我有一个嵌套的XML标记,需要在产品XML中为ExternalId追加PF 输入XML:用于多寄存器嵌套标记的Perl XML编辑,perl,xml-parsing,Perl,Xml Parsing,我有一个嵌套的XML标记,需要在产品XML中为ExternalId追加PF 输入XML: <Products> <Product> <ExternalId>317851</ExternalId> </Product> <Product> <ExternalId>316232</ExternalId> </Product> &l
<Products>
<Product>
<ExternalId>317851</ExternalId>
</Product>
<Product>
<ExternalId>316232</ExternalId>
</Product>
<Product>
<ExternalId>13472</ExternalId>
</Product>
</Products>
317851
316232
13472
期望输出结果:
<Products>
<Product>
<ExternalId>PF317851</ExternalId>
</Product>
<Product>
<ExternalId>PF316232</ExternalId>
</Product>
<Product>
<ExternalId>PF13472</ExternalId>
</Product>
</Products>
PF317851
PF316232
PF13472
我尝试过使用XML Simple。单向使用模块
XML::Twig
script.pl的内容
:
#!/usr/bin/env perl
use warnings;
use strict;
use XML::Twig;
{
my $twig = XML::Twig->new(
twig_handlers => {
'Product/ExternalId' => sub {
$_->prefix( 'PF' );
}
},
pretty_print => 'indented',
)->parsefile( shift )->print;
}
像这样运行:
perl-5.14.2 script.pl xmlfile
这将产生:
<Products>
<Product>
<ExternalId>PF317851</ExternalId>
</Product>
<Product>
<ExternalId>PF316232</ExternalId>
</Product>
<Product>
<ExternalId>PF13472</ExternalId>
</Product>
</Products>
它的调用方式如下:
perl-5.14.2 script.pl xmlfile outfile
在StackOverflow.com上解析XML有很多问题,你看了吗?是的,我也看了很多,并测试了其中的一些。然后,也许你应该使用这些测试中最成功的一个,并询问为什么它不起作用。我试过下面的链接(如我的数组)并按照下面的链接输出。XML保持不变,无法看到ExteralId值的变化。感谢Birei,我没有安装Twig,我的可用库是XML::LibXML、XML::NamespaceSupport、XML::Parser、XML::RegExp、XML::SAX、XML::SimpleI安装了XML::Twig,可以在日志中看到结果,我们如何将结果写入文件?
perl script.pl input>output
也许?我尝试过并收到一个警告(在无效上下文中无用地使用数值gt(>),我可以看到输出正在写入日志文件,但没有写入日志文件file@user1970783:我认为@TLP意味着从shell运行该命令。退出perl
脚本。
perl-5.14.2 script.pl xmlfile outfile