Using xmlstarlet, how do I change the value of an element

前端 未结 1 875
天命终不由人
天命终不由人 2021-01-20 14:45

Using xmlstarlet how can replace the value for all instances of ThreadGroup.num_threads please?

Before

 

        
相关标签:
1条回答
  • 2021-01-20 15:06

    You can du this with xmlstarlet ed -u. Specify an XPath expression and then set the new value with -v:

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

    (Depending on the rest of your XML file, you may have to modify the XPath expression to be more specific and account for more nesting)

    Here's a complete example:

    $ 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>
    
    0 讨论(0)
提交回复
热议问题