1
<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 将这些数据解析到我的网站 - 之前在 Stackoverflow 上向我推荐的 DOM。在下面的代码中,我调用了所有类来获取数据,但是在没有任何问题的情况下我无法获得任何结果。那么请问这可能是我的问题吗?

从现在开始感谢

<?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);
      }
    }     
  }
}

?>
4

2 回答 2

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
于 2013-04-26T09:18:27.293 回答
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);
}
于 2013-04-26T09:25:49.137 回答