2013-08-14 5 views
0

Я установил плагин JSON и получил содержимое HTML-страницы. Теперь я хочу разобрать и найти определенную таблицу, которая имеет только класс, но не id. Я разбираю его с помощью класса PHP DomDocument. У меня есть идея получить доступ к тегу перед таблицей и после этого каким-то образом получить доступ к следующему тегу (моя таблица) с помощью DomDocument. Пример:DomDocument: получить следующий следующий тег в PHP

<a name="Telefonliste" id="Telefonliste"></a> 
<table class="wikitable"> 

Таким образом, я получаю кулаком в <a> и после этого я получаю <table>.

У меня есть все таблицы, используя следующие команды и особенно getElementsByTagName(). После этого я могу получить доступ пункт (2), где мой стол является:

 $dom = new DOMDocument(); 

//load html source 
$html = $dom->loadHTML($myHtml); 

//discard white space 
$dom->preserveWhiteSpace = false; 

//the table by its tag name 
$table = $dom->getElementsByTagName('table'); 
     $rows = $table->item(2)->getElementsByTagName('tr'); 

Таким образом, это нормально, но я хочу, чтобы сделать его более общим, потому что теперь я знаю, что таблица находится в пункте (2), но местоположение можно изменить, например, если новая таблица включена в HTML-страницу перед моей таблицей. Моя таблица не будет в элементе (2), а в пункте (3). Итак, я хочу, чтобы он разбирался таким образом, что я все еще могу добраться до этой таблицы, не меняя что-то в своем коде. Могу ли я это сделать, используя DOMDocument как парсер DOM?

Заранее благодарен!

ответ

0

Вы можете использовать DOMXPath и сделать выражение общим, насколько вам это нужно.

Например:

$dom = new DOMDocument(); 

//discard white space 
$dom->preserveWhiteSpace = false; 

//load html source 
$dom->loadHTML($myHtml); 

$domxpath = new DOMXPath($dom); 
$table = $domxpath->query('//table[@class="wikitable" and not(@id)][0]')->item(0); 
$elementBeforeTable = $table->previousSibling; 
$rows = $table->getElementsByTagName('tr'); 
+0

большое спасибо за помощь, @ boen_robot! Приятного дня! :) – user2667837

0

Я начал писать простое расширение этого для целей веб-соскоб. Я не на 100% в направлении, которое я хочу взять с собой, но вы можете увидеть пример того, как вернуть исходный HTML в ответ поиска, а не только сырой текст.

https://github.com/WolfeDev/PageScraper

EDIT: Я планирую на реализации основной таблицы синтаксического анализа в ближайшее время.

+0

Благодарим вас за страницу @kwolfe! Кажется, это полезно! Хорошего дня! – user2667837