【发布时间】:2018-03-30 17:09:37
【问题描述】:
这是一个多学科的问题,所以答案可能不是纯粹的 CSS。
我正在解析一个大表,我的目标是仅检索 <b></b> 标记之外的文本。我能够选择行,但坚持如何只选择粗体标记之外的文本。
HTML
<div id="tab1">
<table width='650' class='subtblfont'>
<tr><td> </td></tr>
<tr><td> </td></tr>
<tr>
<td><b>Check-in Date: </b>04/20/2013</td>
<td><b>Check-in Date: </b>04/25/2013</td>
</tr>
</table>
代码
$row_content = $results_dom->find('div#tabs-1 tr:nth-child(3) td');
foreach (@$row_content) {
print "$_\n";
}
输出
<td><b>Check-in Date: </b>04/20/2013</td>
<td><b>Check-in Date: </b>04/25/2013</td>
期望的输出
04/20/2013
04/25/2013
我可以使用正则表达式来提取文本,但这不是一个理想的解决方案。有没有办法只选择非粗体文本?
【问题讨论】:
-
策略:遍历
<td>的所有子节点。过滤掉所有<b>元素。从其余部分中提取文本。但似乎您不想摆脱粗体文本,而是找到一个日期。提取所有文本,然后将正则表达式应用于纯文本可能更明智,如果这是您的目标。 -
“我可以使用正则表达式来提取文本,但这不是一个理想的解决方案” 我想知道为什么不呢?似乎您想从
<tr>元素中提取日期,并且依赖于文本的那部分不加粗是一种奇怪的方法。粗体标签是文体而非语义,而mm/dd/yyyy日期序列很容易从文本中精确提取。 -
@Boro 所有
元素都不包含日期。有数百个元素,其中一些具有非常复杂的格式。 @amon 澄清一下,我确实想要使用粗体文本。我不确定如何使用 CSS 选择器(或 Mojo 的 CSS 选择器版本)过滤掉所有 元素。@Notamachine: “或者 Mojo 的 CSS 选择器版本” 据我所知,Mojo::DOM::CSS是 CSS3 的一个非常完整的实现。