繁体   English   中英

Jsoup选择不返回所有元素

[英]Jsoup select not returning all elements

我是Jsoup库的新手。 我有这样的HTML。

<tr class="srrowns"> 
 <td class="num"> <a name="y2015"> </a> 1 </td> 
 <td nowrap><a href="/cve/CVE-2015-4004/" title="CVE-2015-4004 security vulnerability details">CVE-2015-4004</a></td> 
 <td><a href="/cwe-details/119/cwe.html" title="CWE-119 - CWE definition">119</a></td> 
 <td class="num"> <b style="color:red"> </b> </td> 
 <td> DoS Overflow +Info </td> 
 <td>2015-06-07</td> 
 <td>2015-06-08</td> 
 <td>
  <div class="cvssbox" style="background-color:#ff8000">
   8.5
  </div></td> 
 <td align="center">None</td> 
 <td align="center">Remote</td> 
 <td align="center">Low</td> 
 <td align="center">Not required</td> 
 <td align="center">Partial</td> 
 <td align="center">None</td> 
 <td align="center">Complete</td> 
</tr>

当我运行element.select("td") ,它正在返回

<td class="num"> <a name="y2015"> </a> 1 </td>
<td nowrap><a href="/cve/CVE-2015-4004/" title="CVE-2015-4004 security vulnerability details">CVE-2015-4004</a></td>
<td><a href="/cwe-details/119/cwe.html" title="CWE-119 - CWE definition">119</a></td>
<td class="num"> <b style="color:red"> </b> </td>
<td> DoS Overflow +Info </td>
<td>2015-06-07</td>
<td>2015-06-08</td>
<td>
 <div class="cvssbox" style="background-color:#ff8000">
  8.5
 </div></td>
<td align="center">None</td>
<td align="center">Remote</td>
<td align="center">Low</td>
<td align="center">Not required</td>
<td align="center">Partial</td>
<td align="center">Complete</td>

显然,删除“ Complete ”之前的<td align="center">None</td> 有什么办法可以从Jsoup Selector获取所有项目?

我的代码在Scala中看起来像这样。

val connection = Jsoup.connect(url).get() 
val treelist = connection.select("tr.srrowns:contains(CVE-2015-4001)")
val tree = tree.select("td") 

我刚刚看到Jsoup select是使用LinkedHashSet实现的。 我的目标是使用Jsoup.text()从每个标签中提取文本。是否有解决方法?还是我必须编写一个解析器来获取所有节点(包括重复项)?

非常感谢你。

试试这个CSS选择器:

tr.srrowns:has(td:contains(CVE-2015-4004)) > td

DEMO

http://try.jsoup.org/~vAgiHQY6TIJ5MSUzR-m_Y1GD5_U

样本代码

var cve = "CVE-2015-4004";
val doc = Jsoup.connect(url).get() 
val tds = doc.select("tr.srrowns:has(td:contains(" + cve + ")) > td")

for( var td <- tds ){
   println( td.text() );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM