2012-11-05 58 views
-6

我有一個xml在下面,需要修改一些參數值如何使用bash或perl更改XML中的參數值?

<test name="MyRawExample" preserve-order="true"> 
    <parameter name="example-parameter" value="11111" /> 
    <classes> 
     <class name="com.ericol.nco.blocktests.example.ExampleTestcase" /> 
    </classes> 
</test> 

我需要尋找特定的參數名稱,然後通過新的輸入值替換相應的值並更新xml文件。

我想知道是否有人可以幫助我如何改變它或爲我提供一個嚴格的文檔,以便我可以找到最有效的腳本來完成此操作。

問候, Behzad

+8

這不是stackoverflow的工作原理。您向我們展示您目前編碼的內容,詢問您遇到的特定問題,並嘗試提供幫助。我們不會爲您編寫腳本。 –

+0

例如查找pratameter名稱「example-parameter」,然後使用22222更改相應的值標記。 – user737862

+0

我正在嘗試下面的樣子,但我沒有任何參考,因此我可以將其打磨以符合我的預期結果:awk -F 「=」-v newval = 22222'/ parameter/{$ 2 = newval; print; next} 1'src/main/resources/exampleSuite.xml – user737862

回答

6

正如Mortiz提到的,你應該先做出一些努力來解決這個問題。

考慮到這一點,看看XML::Twig Perl模塊。它可以讓你做你想做的事情。

更新:既然你已經做了一些工作,並與一些代碼來了,這裏是一個有效的解決方案:

#!/usr/bin/perl -w 
use strict; 
use XML::Twig; 

my $twig=XML::Twig->new( 
    twig_handlers => { 
     parameter => sub { 
      if ($_->att('name') eq 'example-parameter') { 
       $_->set_att('value' => '22222') 
      } 
     } 
    }, 
    pretty_print => 'indented', 
); 

$twig->parsefile('src/main/resources/exampleSuite.xml'); 
$twig->flush; 

我將讓你做的文件替換。

+0

我試過以下,但得到了奇怪的結果:s#!/usr/bin/perl use strict; 使用警告; 使用XML :: Twig; XML :: Twig->新( pretty_print => '縮進', twig_handlers => { 名=>子{ $ _-> set_text( '例如參數') - >沖洗如果$ _->文本eq'exampleparameter' }, }, ) - > parsefile_inplace('src/main/resources/exampleSuite.xml','* _bak'); – user737862

+0

你可以請我提供一些教程你是如何做到的?!我需要做更多的腳本任務。謝謝 – user737862

+0

我做了以下文件替換,但是當我通過ab參數作爲輸出路徑時,它會執行機器人工作,而當我輸入它的顯式路徑時它工作。 – user737862