2012-08-13 120 views
-2

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

回答

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>