Dom解析问题空结果

时间:2013-04-26 09:13:11

标签: php html parsing dom

<tr class='Jed01'>
<td height='20' class='JEDResult'>1</td>
<td height='30' class='JEDResult'>26.04.2013</td>
<td height='30' class='JEDResult'>19:43</td>
<td height='30' class='JEDResult'>Processing</td>
<td height='30' class='JEDResult'><a href="#" pressed="GetInfo(1233);" title=''>Jeddah</a></td>
</tr>

结果=第一步 - 日期 - 时间 - 州 - 地点

首先,我是PHP的新手,我正试图通过PHP-DOM将这些数据解析到我的网站,这是我之前在Stackoverflow上推荐的。在下面的代码中,我调用了所有类来获取数据,但是在没有任何问题的情况下我无法获得任何结果。那么请问我的问题在哪里?

现在谢谢

<?php

$input = "www.kalkatawi.com/luai.html"
$html = new DOMDocument();
$html->loadHTML($input);


foreach($html->getElementsByTagName('tr') as $tr)
{
  if($tr->getAttribute('class') == 'Jed01')
  {
    foreach($html->getElementsByTagName('td') as $td)
    {
      if($td->getAttribute('class') == 'JEDResult')
      {
        echo ($td->nodeValue);
      }
    }     
  }
}

?>

2 个答案:

答案 0 :(得分:2)

不要忘记那些半冒号;)

试试这个;

<?php

$input = file_get_contents("http://www.kalkatawi.com/luai.html");
$html = new DOMDocument();
$html->loadHTML($input);


foreach($html->getElementsByTagName('tr') as $tr)
{
  if($tr->getAttribute('class') == 'Jed01')
  {
    foreach($tr->getElementsByTagName('td') as $td)
    {
      if($td->getAttribute('class') == 'JEDResult')
      {
        echo ($td->nodeValue);
        echo '<br/>';
      }
    }     
  }
  echo '<br/><br/>';
}

?>

应输出;

1
26.04.2013
19:43
Processing
Jeddah


2
26.04.2013
20:43
Printed
RIY

答案 1 :(得分:1)

此代码存在一些问题。

加载HTML

$input = 'MyLink';
$html = new DOMDocument();
$html->loadHTML($input);

此代码尝试将字符串'MyLink'视为HTML,这显然不是。如果这是你的实际代码,那么除此之外什么都不会有效。提供正确的HTML输入或使用loadHTMLFile从文件加载HTML。

比较区分大小写

一方面是这样的:

<tr class='Jed01'>

另一方面:

if($tr->getAttribute('class') == 'JED01')

'Jed01'!= 'JED01'以来,这永远不会是true。修复外壳或使用其他机制(如stricmp)来比较类。

无法打印对象

这会导致致命错误:

echo ($td);

应该是什么:最有可能echo $td->nodeValue,但其他可能性是开放的,具体取决于你想做什么。

但您可以使用XPath

轻松完成
$xpath = new DOMXPath($html);
$query = "//tr[@class='Jed01']//td[@class='JEDResult']"; // google XPath syntax

foreach ($xpath->query($query) as $node) {
    print_r($node->nodeValue);
}