使用XML :: Twig将XML记录添加到现有XML文件中
我试图在现有XML文件的某个xpath下添加一块内容。我是使用Perl进行XML解析的新手。但我本来应该使用这个XML::Twig。使用XML :: Twig将XML记录添加到现有XML文件中
输入:
<model name="MDL_#USER#" oid="#LOOP#">
<appli name="ERETAIL" oid="2">
<schema desc="Parameters schema" enab="YES" name="Parameters" oid="1" prio="1">
<bean enab="YES" labl="Parameters" name="ERETAILPARA" oid="3" vers="1.0" xpos="0" ypos="0">
<para>
<root>
<row desc="password encryption mode" name="OISENCRYPT" value="BASE64"/>
</root>
</para>
</bean>
</schema>
</appli>
输出:
<model name="MDL_#USER#" oid="#LOOP#">
<appli name="ERETAIL" oid="2">
<schema desc="Parameters schema" enab="YES" name="Parameters" oid="1" prio="1">
<bean enab="YES" labl="Parameters" name="ERETAILPARA" oid="3" vers="1.0" xpos="0" ypos="0">
<para>
<root>
<row desc="password encryption mode" name="OISENCRYPT" value="BASE64"/>
<row name="INTERNAL" desc="" value="">
<row name="PATH" desc="Path" value="#PATH#" />
<row name="EXT" desc="Adresse" value="#GAIAIP#" />
</row>
</root>
</para>
</bean>
</schema>
</appli>
为XML::Twig,创建一个处理程序来修改要更改的元素。在该处理程序,创建要那么新的元素粘贴到元素作为孩子:
use XML::Twig;
my $xml = <<'HERE';
<model name="MDL_#USER#" oid="#LOOP#">
<appli name="ERETAIL" oid="2">
<schema desc="Parameters schema" enab="YES" name="Parameters" oid="1" prio="1">
<bean enab="YES" labl="Parameters" name="ERETAILPARA" oid="3" vers="1.0" xpos="0" ypos="0">
<para>
<root>
<row desc="password encryption mode" name="OISENCRYPT" value="BASE64"/>
</root>
</para>
</bean>
</schema>
</appli>
</model>
HERE
my $twig = XML::Twig->new(
twig_handlers => {
'bean/para/root' => \&add_rows,
},
pretty_print => 'indented',
);
$twig->parse($xml);
$twig->print;
请记住,在处理程序中,你得到的当前元素为$_
:
sub add_rows {
XML::Twig::Elt->new(row => {
name => 'PATH',
desc => 'Path',
value => '#PATH#'
})->paste(last_child => $_);
XML::Twig::Elt->new(row => {
name => 'EXT',
desc => 'Adresse',
value => '#GAIAIP#'
})->paste(last_child => $_);
}
您好布赖恩, 感谢您的输入,但如果我想给路径类似如下 我的$树枝= XML :: Twig->新( twig_handlers => { '/ model/appli [@ name =“ERETAIL”]/schema [@ name =“Parameters”]/bean [@ labl =“Parameters”]/para/root /'=> \&add_rows, }, pretty_print =>'indented', ); 我在处理程序中收到如下错误,无法识别:'/ model/appli [@ name =“ERETAIL”]/schema [@ name = “Parameters”]/bean [@ labl =“Parameters”]/para/root /'在sample2.pl第60行你能帮我吗 – user1575765
如果你有一个新的问题,请提出一个新的问题。也许有人可以帮助你。 –
你好, 感谢您的以下输入 但如果我试图给路径如下我的 $ twig = XML :: Twig-> new(twig_handlers => {'/ model/appli [@ name =“ERETAIL”]/schema [@ name =“Parameters”]/bean [@ labl =“Parameters”]/para/root /'=> \&add_rows,},pretty_print =>'indented',); 我正在收到如下错误: 处理程序中无法识别的表达式:'/ model/appli [@ name =“ERETAIL”]/schema [@ name =“Parameters”]/bean [@ labl =“Parameters”]/para /根/” 能否请你帮我 – user1575765
删除最后一个/路径 – mirod