【发布时间】:2012-11-26 20:08:04
【问题描述】:
这可能只是一个语法问题。
我不清楚如何只匹配 id 以 rowId_ 开头的表行
agent = Mechanize.new
pageC1 = agent.get("/customStrategyScreener!list.action")
表格有 class=tableCellDT。
pageC1.search('table.tableCellDT tr[@id=rowId_]') # parses OK but returns 0 rows since rowId_ is not matched exactly.
pageC1.search('table.tableCellDT tr[@id=rowId_*]') # Throws an error since * is not treated like a wildcard string match
示例 HTML:
<table id="row" cellpadding="5" class="tableCellDT" cellspacing="1">
<thead>
<tr>
<th class="tableHeaderDT">#</th>
<th class="tableHeaderDT sortable">
<a href="?d-16544-s=1&d-16544-o=2&d-16544-p=1">Screener</a></th>
<th class="tableHeaderDT sortable">
<a href="?d-16544-s=2&d-16544-o=2&d-16544-p=1">Strategy</a></th>
<th class="tableHeaderDT"> </th></tr></thead>
<tbody>
<tr id="rowId_BullPut" class="odd">
<td> 1 </td>
<td> Bull</td>
<td></td>
<td><a href="link1?model.itemId=2262">Edit</a>
<a href="javascript:deleteScreener('link2?model.itemId=2262');">Delete</a>
<a href="link3?model.itemId=2262&amp;model.source=list">View</a>
</td></tr>
注意
pageC1 是 Mechanize::Page 对象,而不是 Nokogiri 任何东西。抱歉,一开始不清楚。
Mechanize::Page 没有 #css 或 #xpath 方法,但可以从中提取 Nokogiri 文档(无论如何在内部使用)。
【问题讨论】:
-
你要提取什么?
-
会有其他行的 id 不是 ="rowId_xxxx"。那些我需要忽略的。例如。忽略
<tr id="otherPrefix_Credit" class="odd"> -
我明白这一点,但想知道根据您的输入您想要什么输出。
-
虽然不在问题中,但最终,对于每个 rowId_* tr,我需要在 tr 的 id、单元格 2 的文本和单元格 4 的第三个链接目标中提取 rowId_ 之后的后缀(其中 text= “查看”)。
-
Nokogiri 行数组很好,就像
pageC1.search('table.tableCellDT tr')返回的那样,或者数组数组(每个元素都包含这三个东西的字符串)