使用XML :: Twig更改XML属性值

时间:2012-08-13 05:49:41

标签: perl perl-module xml-twig

我想使用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');

1 个答案:

答案 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>