Dom Node for PHP发现href属性问题 [英] Dom Node for PHP find href attribute issue

查看:111
本文介绍了Dom Node for PHP发现href属性问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



以下内容提取了url的锚点,但是我想要使用url

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

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

  //初始化循环
$ i = 0;
// new dom object
$ dom = new DOMDocument();

//加载html
$ html = @ $ dom-> loadHTMLFile($ url);
//丢弃空白空间
$ dom-> preserveWhiteSpace = true;

//表的标签名称为
$ 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标签的内容



< blockquote>

 < td width =12%align =centerheight =13><! -  mstheme  - >< ; font face =Arial>< span lang =en-us>< b> 
< font style =font-size:9pt;面= 宋体 >
< a linkindex =18target =_ blankhref =results2010 / brmc5k10.htm>总体< / a>



解决方案

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

  $ cols = $ row-> getElementsByTagName('td'); 
// $ cols-> item(1)是一个td DOMElement,所以必须在td元素中找到锚点
//然后获取第一个(仅)ancher的href属性
/ /(链接看起来很长,可能想重构/检查null)
$ events [$ i] ['race_1'] = trim($ cols-> item(1) - > getElementsByTagName('a' ) - > item(0) - > getAttribute('href');






相当确定您应该可以致电 getAttribute() ,您可以验证该项是nodeType XML_ELEMENT_NODE ;它将返回如果项目不是DOMElement,则为空字符串。

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

查看相关内容: DOMNode到PHP中的DOMElement


I am trying to pull the href from a url from some data using php's domDocument.

The following pulls the anchor for the url, but I want the url

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

Here is more of the code if it helps.

   // 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);

Here is the contents of the TD tag

<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>    

解决方案

Update, I see the issue. You need to get the list of a elements from the td.

$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');


Pretty sure that you should be able to call getAttribute() on the item. You can verify that the item is nodeType XML_ELEMENT_NODE; it will return an empty string if the item isn't a DOMElement.

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

See related: DOMNode to DOMElement in php

这篇关于Dom Node for PHP发现href属性问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆