Как использовать getElementById - PullRequest
0 голосов
/ 08 марта 2012

Я хочу получить значения внутри тдс.Я могу сделать это с помощью getElementsByTagName, но я не могу управлять им с помощью getElementById.

HTML может выглядеть следующим образом:

<table id="myid">
<tr>
<td>value1</td>
<td>value2</td>
</tr>
<tr>
<td>value1</td>
<td>value2</td>
</tr>
</table>

PHP, используемый для доступа к значениям:

<?PHP
$dom = new DOMDocument();
$dom->loadHTMLfile('http://remoteDomain/thispage.html');
$table=$dom->getElementById('myid');

    foreach($table->getElementsByTagName('tr') as  $key =>$tr){
       $tr->getElementsByTagName('td')->item(0)->nodeValue;
    }
?>

РЕДАКТИРОВАТЬ

Я получил ошибку: Неустранимая ошибка: вызов функции-члена getElementsByTagName () для необъекта в ...

РЕДАКТИРОВАТЬ2

Информация о php:

DOM / XML включен
DOM / XML API Версия 20031129
libxml Версия 2.7.3

Операционная система: Windows

Ответы [ 4 ]

2 голосов
/ 08 марта 2012

Проблема в том, что getElementById нужен DOCTYPE. Если вы добавите

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

в начале файла, он должен работать (вы также должны добавить теги html и body).

Редактировать: Также вам нужно поставить $dom->validateOnParse = true; перед загрузкой файла HTML.

Это, по-видимому, "особенность" класса DomDocument, см. http://php.net/manual/en/domdocument.getelementbyid.php (комментарии)

1 голос
/ 08 марта 2012

вам нужны кавычки для вашего атрибута id

<table id="myid">
0 голосов
/ 08 марта 2012

Как я понимаю, вы хотите использовать в foreach getElementById, и ваш код работает.

Как можно видеть, есть различие в именах getElement[S]ByTagName и getElementById, с целью.

Определение id является, так сказать, уникальным идентификатором элемента на странице, поэтому предполагается, что только одно значение id (уникальное) будет сохраняться на одной страницеи это значение не может быть присвоено другому идентификатору элемента.Если у вас более одного элемента с одним и тем же значением идентификатора, это неправильно (так как HTML 4 или XHTML 1.0, я думаю).

То, как вы используете, выглядит корректно.

EDIT

В этом случае вы можете получить ответ здесь: Та же проблема уже решена

0 голосов
/ 08 марта 2012

getElementById, как следует из названия, будет работать только в том случае, если целевой элемент на самом деле имеет id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...