Парсер html. Как получить нужные данные?

Михаил

Новичок
Парсер html. Как быть?

Вообщем у меня такая заморочка.
Есть html-документ (41 Kb). Из него нужно получить данные для дальнейшей работы скрипта.
Вот как выглядит документ(нужный кусок):
....
....
....
</tr>
<tr class="Title">
<td width="100%">Results:</td>
</tr>
<tr>
<td id="ReportData">
<table border="0" cellpadding="2">
<tbody>
<tr>
<td class="ReportColumnHeader" align="right" nowrap="nowrap">Amount</td>
<td class="ReportColumnHeader" align="left" nowrap="nowrap">Channel</td>
<td class="ReportColumnHeader" align="left" nowrap="nowrap">Email</td>
<td class="ReportColumnHeader" align="left" nowrap="nowrap">Game</td>
<td class="ReportColumnHeader" align="left" nowrap="nowrap">Order Date/Time</td>
<td class="ReportColumnHeader" align="left" nowrap="nowrap">Order ID</td>
</tr>
<tr>
<td class="ReportData" align="right" nowrap="nowrap" width="50">3.95</td>
<td class="ReportData" align="left" nowrap="nowrap" width="100">DoubleGames.COM</td>
<td class="ReportData" align="left" nowrap="nowrap" width="180">haljeszoo@XXXXX</td>
<td class="ReportData" align="left" nowrap="nowrap" width="80">Sewer Run</td>
<td class="ReportData" nowrap="nowrap" width="150">12/4/2006 2:15:58 AM</td>
<td class="ReportData" align="left" nowrap="nowrap" width="80">8LD116B3HB584354K</td>
</tr>
<tr>
<td class="ReportData" align="right" nowrap="nowrap" width="50">4.95</td>
<td class="ReportData" align="left" nowrap="nowrap" width="100">Alexp</td>
<td class="ReportData" align="left" nowrap="nowrap" width="180">sotele@XXXXX</td>
<td class="ReportData" align="left" nowrap="nowrap" width="80">Virtual Villagers</td>
<td class="ReportData" nowrap="nowrap" width="150">12/4/2006 7:11:01 AM</td>
<td class="ReportData" align="left" nowrap="nowrap" width="80">2JB95068AX3024912</td>
</tr>
<tr>
<td class="ReportData" align="right" nowrap="nowrap" width="50">5.95</td>
<td class="ReportData" align="left" nowrap="nowrap" width="100">Alexp</td>
<td class="ReportData" align="left" nowrap="nowrap" width="180">[email protected]</td>
<td class="ReportData" align="left" nowrap="nowrap" width="80">Virtual Villagers</td>
<td class="ReportData" nowrap="nowrap" width="150">12/4/2006 7:11:45 AM</td>
<td class="ReportData" align="left" nowrap="nowrap" width="80">0611040710004</td>
</tr>
</tbody>
</table>
</td>
</tr>
....
....
....

Выше это часть этого самого html документа. Мне нужно выдрать цифровые значения из полей таблицы и в дальнейшем их использовать (записать в базу).

Может кто знает как получить эти данные. Заранее благодарен всем ответившим.
 

Михаил

Новичок
Парсер html. Как получить нужные данные?

ясно, то есть читай мануальник. что ж дело хорошее :)
 

alekciy

Новичок
Михаил
Юзай XML функции. Файл читаешь функцией loadHTMLFile, потом используешь выражения XPath 'table/tbody/tr/td[@class="ReportData" and @width="50"]' полученый список узлов NodeList и будет нужные тебе цифры. Теперь остается только вызвать в цикле длякаждого узла свойство textContent и можно писать в БД.
 

Михаил

Новичок
alekciy
Спасибо. Это только если пхп5 юзать. У меня пока 4-ка. Сейчас обновляю. Вот порылся в нете. Нашел следующую штуку.

$sContent = file_get_contents($sFilePath);
if(!$sContent)die("could not open file content");
$sRegular = "/<td class=\"ReportData\"(.*)<\/td>/i";
preg_match_all($sRegular, $sContent, $aArray);
foreach($aArray[1] as $k=>$v) echo "$k — $v";

Надо только $sRegular правильно составить, а так вроде катит.
 

alekciy

Новичок
Михаил
Спасибо. Это только если пхп5 юзать. У меня пока 4-ка.
Не вижу проблемы. XPath есть и там, группа функций xpath_ХХХ глава "XXXI. DOM XML Functions".
 

Михаил

Новичок
Ну может я чего не доганяю :)
В скрипте пишу:
-----------------------------------
function parseHtml($path) {
$oDoc = new domdocument();
$oDoc->loadHTMLFile($path);
$aNodeList=$oDoc->getElementsByTagName("td");
....
-----------------------------------

Начинает ругаться, мол не знаю что за domdocument.
Сейчас, после обновления, все впорядке. Получил что нужно. Вот такой функцией:

function parseHtml($path) {
$oDoc = new domdocument();
$oDoc->loadHTMLFile($path);
$aNodeList=$oDoc->getElementsByTagName("td");
$i=0; $j=0; $nLength = 6;
$aData = array();
$bAddData=false;
foreach ($aNodeList as $oNode) {
if($oNode->getAttribute("class")=="ReportData") {
$bAddData = true;
if($j == $nLength) {
$i++;
$j=0;
}
$aData[$i][$j] = $oNode->nodeValue;
}
if($bAddData) $j++;
}
return $aData;
}
 

alekciy

Новичок
Михаил
Начинает ругаться, мол не знаю что за domdocument.
И правильно делает. Я же вроде русским языком объяснил, что если у тебя 4-ая версия пыха, то нужно юзать "XXXI. DOM XML Functions", а если 5-ая, то "XXX. DOM Functions". Разницу чуешь? Ибо XML документы в этих версиях создаются по разному.
 
Сверху