【问题标题】:Using xmlstarlet, how do I change the value of an element使用 xmlstarlet,如何更改元素的值
【发布时间】:2016-02-26 03:38:39
【问题描述】:

请问使用 xmlstarlet 如何替换 ThreadGroup.num_threads 的所有实例的值?

之前

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

之后

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

这是 XML sn-p

  <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>

【问题讨论】:

    标签: bash xmlstarlet


    【解决方案1】:

    您可以使用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>
    

    【讨论】:

      猜你喜欢
      • 2015-04-28
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多