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