使用包含特定文本的html中的regex或xpath提取值

时间:2015-03-03 16:10:28

标签: java regex xpath jmeter

我正在使用JMeter,我想从响应中提取包含特定值的行中列的值:

具体来说,我希望得到包含 677777 的行,并为该行获取列 dv-col dv-col-type-enum dv-col-task-state ,在此特定情况下打开

尝试了几个regexps但尚未成功,所以欢迎任何帮助或线索。

<!DOCTYPE html>
<html lang="en">
    <head></head>
    <body class="bootstrap env-dlt">
        <div id="main-container" class="container-fluid">
            <div id="main-header" class="header"></div>
            <div class="section">
                <div class="dv-filters large-content"></div>
                <div class="dv-container large-content">
                    <table class="table table-striped table-bordered table-condensed">
                        <thead></thead>
                        <tbody class="taskList">
                            <tr>..</tr>
                            <tr>..</tr>
                            <tr>..</tr>
                            <tr>
                                <td class="dv-col dv-col-type-string dv-col-task-panel"></td>
                                <td class="dv-col dv-col-type-string dv-col-task-phase"></td>
                                <td class="dv-col dv-col-type-long dv-col-task-proposal_reference">
                                    <a href="/presentation/workflow/tasks/111111/detail.html">
                                        677777
                                    </a>
                                </td>
                                <td class="dv-col dv-col-type-long dv-col-task-proposal_acronym"></td>
                                <td class="dv-col dv-col-type-enum dv-col-task-state">
                                    Open
                                </td>
                                <td class="dv-col dv-col-type-long dv-col-task-owner"></td>
                                <td class="dv-col dv-col-type-date dv-col-task-deadline"></td>
                                <td class="dv-col dv-col-type-double dv-col-task-score"></td>
                                <td class="dv-col dv-col-type-action"></td>
                            </tr>
                            <tr>..</tr>
                            <tr>..</tr>
                            <tr>..</tr>

Xpath可能是另一种选择吗?

由于

2 个答案:

答案 0 :(得分:3)

获得所需结果的xpath是:

//tr[td/a[contains(text(),"677777")]]/td[@class="dv-col dv-col-type-enum dv-col-task-state"]/text()

首先找到包含<tr>文本()包含或等于677777的<td>的{​​{1}},然后找到<a>标签{ {1}}是目标<td>下的“dv-col dv-col-type-enum dv-col-task-state”

答案 1 :(得分:2)

  

我想得到包含677777的行

使用XPath(选择整个行节点):

//tr[*=677777]

获取@class属性内容的列数据测试:

//tr[*=677777]/td[@class[contains(.,"dv-col-task-state") and contains(.,"dv-col-type-enum") ]]

(假设您没有或不关心匹配包含这些类名的类。例如:dv-col-task-state-something。如果这是一个问题,您需要连接并匹配class属性中的空格以确保它们代表各个类名称