本文介绍了使用xmlstarlet,如何更改元素的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何使用xmlstarlet替换ThreadGroup.num_threads的所有实例的值?
Using xmlstarlet how can replace the value for all instances of ThreadGroup.num_threads please?
之前
<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>
推荐答案
您可以使用xmlstarlet ed -u
来解决这个问题.指定一个XPath表达式,然后使用-v
设置新值:
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
(根据XML文件的其余部分,您可能需要修改XPath表达式以使其更具体并考虑更多嵌套)
(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)
这是一个完整的例子:
$ 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>
这篇关于使用xmlstarlet,如何更改元素的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!