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

问题描述:

我想使用XML::Twig更改XML属性值。我可以用XML::LibXML这样使用XML :: Twig更改XML属性值

 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

那你试试呢?设置属性的值是用$ elt-> set_att(name =>'dfdsa')完成的' – mirod 2012-08-13 06:05:41

+0

Hello Minard, 我在下面试过,但是它没有修改内容:( my $ doc = XML :: Twig-我的$($ attr)= $ doc-> findnodes($ xpath); $ attr-> set_att(name ='xpath'); new-> parsefile('pattern.xml'); \t my $ xpath ='/ model'; my >'dfdsa'); – user1575765 2012-08-13 06:37:31

+0

即使我尝试下面的Bud没有工作 XML :: Twig-> new(twig_handlers => {'model'=> sub {$ _-> set_att(name =>'dfdsa')) }} \t, - > parsefile('pattern.xml'); – user1575765 2012-08-13 07:05:39

。即使您的问题中的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>