【问题标题】:Dom Node for PHP find href attribute issuePHP 的 Dom 节点查找 href 属性问题
【发布时间】:2011-10-03 18:37:52
【问题描述】:

我正在尝试使用 php 的 domDocument 从某些数据中的 url 中提取 href。

以下拉取url的锚点,但我想要url

$events[$i]['race_1'] = trim($cols->item(1)->nodeValue); 

如果有帮助,这里还有更多代码。

   // initialize loop
   $i = 0;
   // new dom object  
   $dom = new DOMDocument();  

   //load the html  
   $html = @$dom->loadHTMLFile($url);  
   //discard white space   
   $dom->preserveWhiteSpace = true;   

   //the table by its tag name  
   $information = $dom->getElementsByTagName('table'); 
   $rows = $information->item(4)->getElementsByTagName('tr');  

   foreach ($rows as $row)   
   { 
    $cols = $row->getElementsByTagName('td');   
    $events[$i]['title'] = trim($cols->item(0)->nodeValue); 
    $events[$i]['race_1'] = trim($cols->item(1)->nodeValue);   
$events[$i]['race_2'] = trim($cols->item(2)->nodeValue);  
$events[$i]['race_3'] = trim($cols->item(3)->nodeValue);
$date = explode('/', trim($cols->item(4)->nodeValue));
$events[$i]['month'] = $date['0'];
$events[$i]['day'] = $date['1'];
$citystate = explode(',', trim($cols->item(5)->nodeValue));   
$events[$i]['city'] = $citystate['0'];
$events[$i]['state'] = $citystate['1'];
$i++;
   }
   print_r($events);

这是TD标签的内容

<td width="12%" align="center" height="13"><!--mstheme--><font face="Arial"><span lang="en-us"><b>
          <font style="font-size: 9pt;" face="Verdana">
          <a linkindex="18" target="_blank" href="results2010/brmc5k10.htm">Overall</a>    

【问题讨论】:

    标签: php dom domdocument


    【解决方案1】:

    更新,我看到了问题。您需要从td 中获取a 元素的列表。

    $cols = $row->getElementsByTagName('td');
    // $cols->item(1) is a td DOMElement, so have to find anchors in the td element
    // then get the first (only) ancher's href attribute
    // (chaining looks long, might want to refactor/check for nulls)
    $events[$i]['race_1'] = trim($cols->item(1)->getElementsByTagName('a')->item(0)->getAttribute('href');
    

    非常确定您应该可以在该项目上调用getAttribute()。可以验证item是nodeTypeXML_ELEMENT_NODE;如果项目不是 DOMElement,它将返回一个空字符串。

    <?php
    // ...
    $events[$i]['race_1'] = trim($cols->item(1)->getAttribute('href'));
    // ...   
    ?>
    

    查看相关:DOMNode to DOMElement in php

    【讨论】:

    • 这会返回一个空字符串但我不明白为什么,我已经添加了上面 TD 标记的内容可能有帮助
    • 这可能是因为$cols-&gt;item(1) 不是DOMElement。做一个var_dump($cols-&gt;item(1)-&gt;nodeType == XML_ELEMENT_NODE); 看看是不是。
    猜你喜欢
    • 2012-10-28
    • 2015-05-18
    • 2010-11-10
    • 2011-01-24
    • 2014-02-13
    • 2011-05-20
    • 2020-11-03
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多