phpQuery - получает данные из таблицы без класса или идентификатора. - PullRequest
1 голос
/ 02 апреля 2012

Я пытаюсь получить некоторые данные из таблицы, где у тега нет идентификатора, класса или любого другого атрибута, который может его идентифицировать.

Структура таблицы выглядит примерно так:

<table>
<tr>
    <td><b>Type</b></td>
    <td>Plug and Play</td>
</tr>
<tr>
    <td><b>Model</b></td>
    <td>AH591Z</td>
</tr>
<tr>
    <td><b>Date</b></td>
    <td>02.04.2012</td>
</tr>
<tr>
    <td><b>Name</b></td>
    <td>CryptMachine</td>
</tr>
<tr>
    <td><b>ID</b></td>
    <td>9283</td>
</tr>
</table>

Как мне, например, получить Модель, Имя и Идентификатор, но игнорировать дату и тип, потому что мне не нужны эти значения.

Есть ли умный способ сделать это с помощью phpQuery?До сих пор я только что поиграл с библиотекой phpQuery, но я определенно получил основы, я просто не могу обдумать это.

1 Ответ

1 голос
/ 02 апреля 2012

Я не проверял это, но что-то вроде этого может быть?

$doc = phpQuery::newDocumentHTML($theDocument);
$table = $doc["table"];
$model = pq($table)->find("tr:eq(1) td:eq(1)")->text();
$id = pg($table)->find("tr:eq(4) td:eq(1)")->text();

Если на странице более одного table, возможно, вам придется использовать eq (n), чтобы указать, какойВо-первых, помните, что они перечисляются от 0, а не от 1.

ОБНОВЛЕНИЕ: Если вы не знаете порядок строк, вы можете использовать что-то вроде этого (опять же, не проверено, извините, но вы должны получить вашуказал в правильном направлении)

<?php

function getValue($table, $label) {
    $lable = strtolower($label);
    $rows = pq('tr', $table);

    foreach($rows as $row):
        if ( strtolower(pq($row)->find('td:eq(0)').text() ) === $label ):
            return pq($row)->find('td:eq(1)').text();
        endif;
    endforeach;
}

$doc = phpQuery::newDocumentHTML($theDocument);
$table = $doc["table"];

$model = getValue($table, "Model");
$id = getValue($table, "ID");

?>
...