2016-02-25 48 views
2

使用xmlstarlet如何替换ThreadGroup.num_threads的所有实例的值?使用xmlstarlet时,如何更改元素的值

之前

<stringProp name="ThreadGroup.num_threads">FOOO BARR</stringProp> 

<stringProp name="ThreadGroup.num_threads">99999</stringProp> 

这里的XML片段

<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Blogs" enabled="true"> 
    <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> 
    <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" enabled="true"> 
     <boolProp name="LoopController.continue_forever">false</boolProp> 
     <stringProp name="LoopController.loops">778</stringProp> 
    </elementProp> 
    <stringProp name="ThreadGroup.num_threads">FOOO BARR</stringProp> 
    <stringProp name="ThreadGroup.ramp_time">66</stringProp> 
    <longProp name="ThreadGroup.start_time">44</longProp> 
    <longProp name="ThreadGroup.end_time">55</longProp> 
    <boolProp name="ThreadGroup.scheduler">false</boolProp> 
    <stringProp name="ThreadGroup.duration">77</stringProp> 
    <stringProp name="ThreadGroup.delay">0</stringProp> 
    </ThreadGroup> 

回答

2

你可以都用这个xmlstarlet ed -u。指定一个XPath表达式,然后设置与-v新值:

xmlstarlet ed -u '/ThreadGroup/stringProp[@name="ThreadGroup.num_threads"]' \ 
       -v 99999 file.xml 

(根据您的XML文件的其余部分,你可能需要修改XPath表达式更具体和考虑更多的嵌套)

下面是一个完整的示例:

$ cat file.xml 
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Blogs" enabled="true"> 
    <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> 
    <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" enabled="true"> 
    <boolProp name="LoopController.continue_forever">false</boolProp> 
    <stringProp name="LoopController.loops">778</stringProp> 
    </elementProp> 
    <stringProp name="ThreadGroup.num_threads">99999</stringProp> 
    <stringProp name="ThreadGroup.ramp_time">66</stringProp> 
    <longProp name="ThreadGroup.start_time">44</longProp> 
    <longProp name="ThreadGroup.end_time">55</longProp> 
    <boolProp name="ThreadGroup.scheduler">false</boolProp> 
    <stringProp name="ThreadGroup.duration">77</stringProp> 
    <stringProp name="ThreadGroup.delay">0</stringProp> 
</ThreadGroup> 

$ xmlstarlet ed -u '/ThreadGroup/stringProp[@name="ThreadGroup.num_threads"]' \ 
       -v 99999 file.xml 
<?xml version="1.0"?> 
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Blogs" enabled="true"> 
    <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> 
    <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" enabled="true"> 
    <boolProp name="LoopController.continue_forever">false</boolProp> 
    <stringProp name="LoopController.loops">778</stringProp> 
    </elementProp> 
    <stringProp name="ThreadGroup.num_threads">99999</stringProp> 
    <stringProp name="ThreadGroup.ramp_time">66</stringProp> 
    <longProp name="ThreadGroup.start_time">44</longProp> 
    <longProp name="ThreadGroup.end_time">55</longProp> 
    <boolProp name="ThreadGroup.scheduler">false</boolProp> 
    <stringProp name="ThreadGroup.duration">77</stringProp> 
    <stringProp name="ThreadGroup.delay">0</stringProp> 
</ThreadGroup> 
相关问题