получить полную таблицу с php domdocument и распечатать ее

Я хотел бы получить полную html-таблицу с id = 'myid' из заданного URL-адреса, используя php domdddocument, и распечатать ее на нашей веб-странице. Как я могу это сделать?

Я пытаюсь с помощью приведенного ниже кода получить таблицу, но я не могу получить trs (строки таблицы) и tds (данные таблицы) и другой внутренний HTML.

$xml = new DOMDocument();

@$xml->loadHTMLFile($url);
foreach($xml->getElementById('myid') as $table)
{
  // now how to get tr and td and other element ?
  // i am getting other element like :-
   $links = $table->getElementsByTagName('a');
   foreach($links as $innerAnchor)
  {
    //doing something with anchor tag...
   }

}

Нужна помощь.

Я новичок в php domdddocument.

Большое спасибо.


person Bajrang    schedule 15.09.2011    source источник
comment
Снимите @ off @$xml пока будете отлаживать, тогда по крайней мере вы сможете увидеть ошибки... то, что вы делаете в целом выглядит правильно, но для меня уже поздно, и я выпил несколько рюмок, так что Утром, когда протрезвею, посмотрю получше...   -  person Endophage    schedule 15.09.2011
comment
@ajreal, html дается из URL-адреса, переданного в функцию $xml-›loadHTMLFile, которая может быть чем угодно, но не будет действительным URL-адресом.   -  person Bajrang    schedule 15.09.2011
comment
getElementById возвращает только один элемент, как я полагаю. Нет необходимости в первом foreach   -  person mishau    schedule 15.09.2011
comment
Из руководства по php о функции getElementById: чтобы эта функция работала, вам нужно будет либо установить некоторые атрибуты ID с помощью DOMElement::setIdAttribute, либо DTD, который определяет атрибут как идентификатор типа. В последнем случае перед использованием этой функции вам потребуется проверить документ с помощью DOMDocument::validate или DOMDocument-›validateOnParse.   -  person mishau    schedule 15.09.2011
comment
Братский вопрос: печать таблицы html с использованием документа php dom   -  person hakre    schedule 24.06.2013


Ответы (1)


Как я уже говорил, лучше не использовать getElementById. Лучше проанализируйте мой тестовый образец; оно работает

$html = "<table ID='myid'><tr><td>1</td><td>2</td></tr><tr><td>4</td><td>5</td></tr><tr><td>7</td><td>8</td></tr></table>";

$xml = new DOMDocument();
$xml->validateOnParse = true;
$xml->loadHTML($html);

$xpath = new DOMXPath($xml);
$table =$xpath->query("//*[@id='myid']")->item(0);

// for printing the whole html table just type: print $xml->saveXML($table); 

$rows = $table->getElementsByTagName("tr");

foreach ($rows as $row) {
  $cells = $row -> getElementsByTagName('td');
  foreach ($cells as $cell) {
    print $cell->nodeValue; // print cells' content as 124578
  }
}
person mishau    schedule 15.09.2011
comment
Теоретически это должно работать, но вы не можете знать, что глубина таблицы элементов точно расположена на втором уровне (как в вашем примере). - person ajreal; 15.09.2011
comment
Нет, //* игнорирует глубину. Эта строка дает тот же результат: [code]‹html›‹body›‹table ID='myid'›‹tr›‹td›1‹/td›‹td›2‹/td›‹/tr›‹tr› ‹td›4‹/td›‹td›5‹/td›‹/tr›‹tr›‹td›7‹/td›‹td›8‹/td›‹/tr›‹/стол›‹/корпус ›‹/html› - person mishau; 16.09.2011
comment
@mishau, но я хочу напечатать полную html-таблицу на своей веб-странице со всем содержимым, таким как привязка, img, внутренняя таблица, tr tds, p и т. Д., Как есть. И $cell-›nodeValue печатает только текст, а не все остальные элементы. - person Bajrang; 16.09.2011
comment
Это еще проще: после того, как у вас есть $table, поместите эту строку print $xml->saveXML($table); - person mishau; 16.09.2011
comment
Фантастический ответ! Вы решили мою проблему за несколько секунд. Спасибо - person Junaid Usmani; 05.03.2020