XPath的。选择“A”标记文本但仅限于特定文本值

时间:2015-04-28 15:33:15

标签: html xpath

我有以下HTML代码,我正在电影网站上阅读:

<div class="blue">
    Director <a href="http://...">Bobby Farrelly</a>, <a href="http://...">Peter Farrelly</a>. With <a href="http://...>Jim Carrey</a>, <a href="http://...">Jeff Daniels</a>.
    <div class="red">
         page 1
    </div>
</div>

我正试图将导演与演员分开使用XPath。你可能会看到

导演是: Bobby Farrelly和Peter Farrelly

演员是: Jim Carrey和Jeff Daniels

将导演与演员区分开来的唯一方法是检测字符串“。使用”并选择A标签。

使用:

foreach($r as $result) {
    $tag = $result->getElementsByTagName("a");
    foreach($tag as $text) {
        $t = trim(preg_replace("/[\r\n]+/", " ", $text->nodeValue));
    }
}

我可以在A标签内选择DIV和文本。但是这将选择所有A标签,只获得导演我只需要选择A标签内的文字直到“。With”字符串。

1 个答案:

答案 0 :(得分:2)

一个可能的xpath:

//div[@class="blue"]/a[following-sibling::text()[contains(., "With")]]

上面的xpath读取:查找div属性值等于“蓝色”的所有class。然后,在每个div内,在包含文本<a>的文本节点之前选择所有"With"标记。

xpath tester中的输出:

'<a href="http://...">Bobby Farrelly</a>'
'<a href="http://...">Peter Farrelly</a>'