XPath查询:从标记中获取属性href

时间:2014-01-30 11:34:31

标签: html xpath domdocument

我想使用XPath从href - 标记中获取a属性,但它在同一文件中有两次出现。我怎么相处? 我需要检查IF是否存在值为$ street / object的href属性,我有这个代码并且它不起作用:

$product_photo     = $xpath->query("//a[contains(@href,'{$object_street}fotos/')][1]");
        $product_360       = $xpath->query("//a[contains(@href,'{$object_street}360-fotos/')][1]");
        $product_blueprint = $xpath->query("//a[contains(@href,'{$object_street}plattegrond/')][1]");
        $product_video     = $xpath->query("//a[contains(@href,'{$object_street}video/')][1]");

它根本不会返回任何内容。谁可以帮助我?

2 个答案:

答案 0 :(得分:65)

对于以下HTML文档:

<html>
  <body>
    <a href="http://www.example.com">Example</a> 
    <a href="http://www.stackoverflow.com">SO</a> 
  </body>
</html>

xpath查询/html/body//a/@href(或简称为//a/@href)将返回:

    http://www.example.com
    http://www.stackoverflow.com

要选择特定实例,请使用/html/body//a[N]/@href

    $ /html/body//a[2]/@href
    http://www.stackoverflow.com

要测试属性中包含的字符串并返回属性本身,请检查不在属性上的标记:

    $ /html/body//a[contains(@href,'example')]/@href
    http://www.example.com

混合两者:

    $ /html/body//a[contains(@href,'com')][2]/@href
    http://www.stackoverflow.com

答案 1 :(得分:0)

@mockinterface共享的答案是正确的。尽管我想加2美分。

如果有人使用scrapy之类的框架,则必须使用/html/body//a[contains(@href,'com')][2]/@href和get()这样的

response.xpath('//a[contains(@href,'com')][2]/@href').get()