考虑以下文本,该文本可能是来自jMeter的HTTP响应的一部分:
<menu id="Alpha" name="alpha">
<option value="a">A</option>
<option value="b">B</option>
<option value="c" selected="selected">C</option>
</menu>
<menu id="Bravo" name="bravo">
<option value="d">D</option>
<option value="e">E</option>
</menu>
如果选择了某个选项,我尝试提取每个菜单的ID以及所选选项的值。如果未选择任何选项,则默认情况下,应匹配第一个选项的值。例如,在此示例中,我希望匹配以下内容:
"Alpha" "c"
"Bravo" "d"
到目前为止,我写了以下内容:
<select id="Form:parameterList:([^"]+?)".*?>.*?(?:<option value="([^"]*?)".*?(?:selected="selected")?>)?.*?</select>
这个问题是只匹配第一个选项的值,并且永远不会匹配所选的选项。也就是说,我想优先匹配可选模式。
谢谢, 维克多
答案 0 :(得分:1)
考虑您的脚本将如何使用复杂的正则表达式进行维护。
您可以使用xpath提取器,条件/循环控制器和/或后处理器来实现您想要的结果......
首先获取所有ID的列表:
//menu/@id
您可以获取一个ID列表,其中包含一个选项属性已选中=&#39;已选中&#39;类似于:
//menu/@id[/option[@selected='selected']]
遍历第一个列表(例如,在beanshell处理器或循环控制器中)。如果ID出现在第二个列表中,请使用以下内容提取所选值:
//menu[@id='xxxx']/option[@selected='selected']/@value /*substitue xxxx with appropriate id*/
如果ID没有选择&#39; value,提取默认值:
//menu/[@id='xxxx']/option[1]/@value /*substitue xxxx with appropriate id*/
(对不起,如果我的xpath不完全准确,我只从内存中写出来,但希望面包屑可以跟随)