如何用XPath提取表格td中含'Orange County'的所有分段内容?
解决XPath提取所有含'Orange'文本实例的问题
嘿,我懂你研究半天却只拿到第一个匹配项的郁闷!咱们来看看怎么搞定这个问题~
问题根源
你现在用的XPath //table/tr/td[4]/text()[contains(.,'Orange')] 只返回第一个匹配文本,是因为text()在XPath中默认只会选取当前节点的第一个子文本节点。如果<td>里包含多个独立的文本节点(比如地址分段、换行分隔),后面的匹配项就会被漏掉。
两种可行的解决方案
方案1:抓取所有包含目标文本的
<tr>行
如果你想先定位到所有包含'Orange County'的整行,用这个XPath://table/tr[contains(td[4], 'Orange')]这样会返回所有符合条件的
<tr>节点,之后你可以根据需求提取该行内的其他内容,或者进一步获取<td>里的所有文本。方案2:直接提取
<td>内所有含'Orange'的文本节点
要是你需要直接拿到所有匹配的文本片段,把XPath改成这样://table/tr/td[4]/descendant-or-self::text()[contains(.,'Orange')]descendant-or-self::text()会遍历<td[4]>下的所有子文本节点,不管是第几个,只要包含'Orange'就会被抓取到,这样就能拿到你示例里的2个实例啦。
小提示
如果你的<td>里的文本是被其他标签包裹的(比如<span>),上面的方案依然有效,因为descendant-or-self会深入到所有子节点的文本内容里。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

