在XML中查找和替换值(动态)

2024-06-25 23:11:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下XML代码(这是用于jmeter负载测试的脚本),例如:

<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
     <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
     <elementProp name="ThreadGroup.main_controller" elementType="LoopController">
       <boolProp name="LoopController.continue_forever">false</boolProp>
       <stringProp name="LoopController.loops">10</stringProp>
     </elementProp>
     <intProp name="ThreadGroup.num_threads">1000</intProp>
     <intProp name="ThreadGroup.ramp_time">1</intProp>
     <longProp name="ThreadGroup.start_time">1363247040000</longProp>
     <longProp name="ThreadGroup.end_time">1363247040000</longProp>
     <boolProp name="ThreadGroup.scheduler">false</boolProp>
     <longProp name="ThreadGroup.duration">0</longProp>
     <longProp name="ThreadGroup.delay">0</longProp>
   </ThreadGroup>

我希望更改名为LoopController.loops循环ThreadGroup.num\u线程从循环中动态值(例如10+10和1000+100)的常量值(例如现在的-10和1000)。你知道吗

我是Python的新手,抱歉。你知道吗

先谢谢你。你知道吗


Tags: 代码namefalsetimexmlnumcontinueloops
1条回答
网友
1楼 · 发布于 2024-06-25 23:11:43

现在还不清楚您到底想做什么,但是这个解决方案使用^{}库来解析示例XML数据并进行您描述的更改。你知道吗

XPath表达式//*只是查找数据中的每个元素,随后的for循环检查找到的每个元素的name属性,以确定它是否是所需的元素之一。如果存在匹配项,则text属性将更改为您描述的值。很明显,任何你喜欢的绳子都可以放在这里。你知道吗

from lxml import etree

parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse('thread_group.xml', parser)

for e in tree.xpath('//*'):
    name = e.get('name')
    if name == 'LoopController.loops':
        e.text = '10+10'
    elif name == 'ThreadGroup.num_threads':
        e.text = '1000+1000'


print(etree.tostring(tree, pretty_print=True))

输出

<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
  <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
  <elementProp name="ThreadGroup.main_controller" elementType="LoopController">
    <boolProp name="LoopController.continue_forever">false</boolProp>
    <stringProp name="LoopController.loops">10+10</stringProp>
  </elementProp>
  <intProp name="ThreadGroup.num_threads">1000+1000</intProp>
  <intProp name="ThreadGroup.ramp_time">1</intProp>
  <longProp name="ThreadGroup.start_time">1363247040000</longProp>
  <longProp name="ThreadGroup.end_time">1363247040000</longProp>
  <boolProp name="ThreadGroup.scheduler">false</boolProp>
  <longProp name="ThreadGroup.duration">0</longProp>
  <longProp name="ThreadGroup.delay">0</longProp>
</ThreadGroup>

相关问题 更多 >