我想使用XML::Twig
更改XML属性值。我可以使用像这样的XML::LibXML
my $doc = XML::LibXML->new->parsefile();
my $xpath = '/model/@name';
my ($attr) = $doc->findnodes($xpath);
$attr->setValue('dfdsa');
但由于一些约束,我必须使用XML::Twig
输入
<model name="XXXX" oid="i">
<system oid="1" uri="/gaia" listing="NO">
<schema desc="HTTP Sever schema" enab="YES" name="HTTP" oid="1" prio="5">
</schema>
</system>
</model>
输出
<model name="dfdsa" oid="i">
<system oid="1" uri="/gaia" listing="NO">
<schema desc="HTTP Sever schema" enab="YES" name="HTTP" oid="1" prio="5">
</schema>
</system>
</model>
我尝试过这段代码,但它没有修改内容
my $doc = XML::Twig->new->parsefile('pattern.xml');
my $xpath = '/model';
my ($attr) = $doc->findnodes($xpath);
$attr->set_att(name => 'dfdsa');
答案 0 :(得分:2)
我很失望你似乎几乎没有尝试自己解决这个问题。即使您的问题中的XML格式不正确,我也必须解决它。
这个程序可以做你想要的事情
use strict;
use warnings;
use XML::Twig;
my $twig = XML::Twig->new;
$twig->parsefile('pattern.xml');
my ($model) = $twig->findnodes('/model[@name]');
$model->set_att(name => 'dfdsa');
$twig->print(pretty_print => 'indented');
<强>输出强>
<model name="dfdsa" oid="i">
<system listing="NO" oid="1" uri="/gaia">
<schema desc="HTTP Sever schema" enab="YES" name="HTTP" oid="1" prio="5"></schema>
</system>
</model>