php
  • domdocument
  • xpath
  • 2011-03-09 41 views 2 likes 
    2

    获取与使用Xpath和domDocument显示的给定单词匹配的链接时出现问题。一切似乎都在使用for($i=0;$i<$documentLinks->length;$i++){在xpath/domdocument查询中查找与给定字符串匹配的链接

    任何人都可以帮助我在哪里出错吗?

    $html = '<ol>'; 
    $html .= ' <li id="stuff-123"> some copy here </li>'; 
    $html .= ' <li id="stuff-456"> some copy here <a href="http://domain.com">domain</a> </li>'; 
    $html .= ' <li id="stuff-789"> some copy here </li>'; 
    $html .= '</ol>'; 
    
    
        $dom = new DOMDocument(); 
        $dom->loadHTML($html); 
        $xpath = new DOMXPath($dom); 
        $result = $xpath->query('//ol/li[starts-with(@id, "stuff")]'); 
        foreach($result as $e){ 
         $documentLinks = $e->getElementsByTagName('a')->item(0)->nodeValue; 
         for($i=0;$i<$documentLinks->length;$i++){ 
          $documentLink = $documentLinks->item($i); 
          if(preg_match("/domain/i", $documentLink->getAttribute("href"))){ 
           echo $documentLink->getAttribute("href") . "\n"; 
          } 
         } 
        } 
    
    +1

    是不是'$ documentLinks'根据http://www.php.net/manual/en/class.domnode.php – 2011-03-09 20:22:34

    回答

    1

    行:$documentLinks = $e->getElementsByTagName('a')->item(0)->nodeValue;

    也许应该是:$documentLinks = $e->getElementsByTagName('a');


    $e->getElementsByTagName('a') 
    

    返回所有$ê其标记为<a ...>这意味着

    $e->getElementsByTagName('a')->item(0); 
    
    儿童

    正在返回$ e下的第一个链接e

    $documentLinks = $e->getElementsByTagName('a')->item(0)->nodeValue; 正在返回该第一个链接的文本。

    http://php.net/manual/en/domdocument.getelementsbytagname.php

    +0

    感谢mlaw,这样做了一个字符串。 – 2011-03-09 20:32:18

    1

    您可以直接通过XPath的

    //ol/li[starts-with(@id, "stuff")]/a[contains(@href, "domain")]/@href 
    

    获取href属性,然后就做

    foreach($result as $href){ 
        echo $href->nodeValue; 
    } 
    

    注意contains功能是区分大小写的,但。

    相关问题