Вы пишете:
echo $total->length; //shows 0
Это означает, что xpath вернул 0 элементов. Так что на самом деле он не делает то, что хотел бы.
//html/body/table[4]/tr[3]/td[4]
Или иначе проверьте синтаксис запроса xpath, что вы не допустили ошибку.
Кроме того, я сначала загрузил бы документ HTML, а затем инициализировал объект xpath.
$totalPath="//html/body/table[4]/tr[3]/td[4]";
$page=new DOMDocument();
$page->loadHTML($content);
$xpath=new DOMXPath($page);
$total=$xpath->query($totalPath);
Редактировать: Удалено тело в соответствии с предложением Вриккена.
РЕДАКТИРОВАТЬ: Включить отчеты об ошибках вкл. предупреждения, чтобы вы могли убедиться, что а) HTML-код правильно загружен в DomDocument и б) если возникла проблема с XPath, вы его видите.
Должен бежать. Это мой код:
<?php
$url="http://www.rtu.ac.in/results/reformat.php";
$post="rollnumber=08epccs060&filename=fetchmodulesem_4_btech410m.php&button=Submit";
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$content=curl_exec($ch);
curl_close($ch);
echo 'Size: ', strlen($content), "\n";
echo 'Beginning: ', substr($content, 0, 512), "\n\n";
$page=new DOMDocument();
$page->recover=false;
$page->loadHTML($content);
echo "\nLoaded XML:\n", $page->saveXML($page), "\n";
$xpath=new DOMXPath($page);
$totalPath="html/body/table[4]/tbody/tr[3]/td[4]";
$paths = array(
'//body',
'//body/table',
'//body/table[4]',
'//body/table[4]/tr',
'//body/table[4]/tr[3]',
'//body/table[4]/tr[3]/td',
'//body/table[4]/tr[3]/td[4]',
'//html/body/table[4]/tr[3]/td[4]',
);
foreach($paths as $path) {
$result=$xpath->query($path);
echo $path, ': ', $result->length, "\n";
}
И это вывод (вырезал верхний вывод, который был только для проверки загрузки):
//body: 1
//body/table: 4
//body/table[4]: 1
//body/table[4]/tr: 3
//body/table[4]/tr[3]: 1
//body/table[4]/tr[3]/td: 4
//body/table[4]/tr[3]/td[4]: 1
//html/body/table[4]/tr[3]/td[4]: 1
Всегда возвращает длину, означающую, что хотя бы есть узел.