Тема: Питання по simple html dom

Одним словом є в мене html код типу такого:

Прихований текст

<ul>
<li><b><a href="004.html" title="Глава I. Квадратичная функция">Глава I. Квадратичная функция</a> … стр. 4</b>
  <ul>
    <li><a href="004.html" title="§ 1. Функции и их свойства">§ 1. Функции и их свойства</a> … стр. 4</li>
    <li><a href="012.html" title="§ 2. Квадратный трехчлен">§ 2. Квадратный трехчлен</a> … стр. 12</li>
    <li><a href="019.html" title="§ 3. Квадратичная функция и ее график">§ 3. Квадратичная функция и ее график</a> … стр. 19</li>
    <li><a href="032.html" title="§ 4. Степенная функция. Корень п-й степени">§ 4. Степенная функция. Корень п-й степени</a> … стр. 32</li>
  </ul>
</li>
<li><a href="064.html" title="Глава II. Уравнения и неравенства с одной переменной"><b>Глава II. Уравнения и неравенства с одной переменной</b></a> <b>… стр. 64</b>
  <ul>
    <li><a href="064.html" title="§ 5. Уравнения с одной переменной">§ 5. Уравнения с одной переменной</a> … стр. 64</li>
    <li><a href="077.html" title="§ 6. Неравенства с одной переменной">§ 6. Неравенства с одной переменной</a> … стр. 77</li>
    </ul>
</li>
<li><a href="112.html" title="Глава III. Уравнения и неравенства с двумя переменными"><b>Глава III. Уравнения и неравенства с двумя переменными</b></a> <b>… стр. 112</b>
  <ul>
    <li><a href="112.html" title="§ 7. Уравнения с двумя переменными и их системы">§ 7. Уравнения с двумя переменными и их системы</a> … стр. 112</li>
    <li><a href="151.html" title="§ 8. Неравенства с двумя переменными и их системы">§ 8. Неравенства с двумя переменными и их системы</a> … стр. 151</li>
    </ul>
</li>
<li><a href="181.html" title="Глава IV. Арифметическая и геометрическая прогрессии"><b>Глава IV. Арифметическая и геометрическая прогрессии</b></a> <b>… стр. 181</b>
  <ul>
    <li><a href="181.html" title="§ 9. Арифметическая прогрессия">§ 9. Арифметическая прогрессия</a> … стр. 181</li>
    <li><a href="190.html" title="§ 10. Геометрическая прогрессия">§ 10. Геометрическая прогрессия</a> … стр. 190</li>
    </ul>
</li>
<li><a href="209.html" title="Глава V. Элементы комбинаторики и теории вероятностей"><b>Глава V. Элементы комбинаторики и теории вероятностей</b></a> <b>… стр. 209</b>
  <ul>
    <li><a href="209.html" title="§ 11. Элементы комбинаторики">§ 11. Элементы комбинаторики</a> … стр. 209</li>
    <li><a href="214.html" title="§ 12. Начальные сведения из теории вероятностей">§ 12. Начальные сведения из теории вероятностей</a> … стр. 214</li>
    </ul>
</li>
</ul> 

і мені відповідно треба таке спарсити.
Вирішив заюзати simple html dom. Оскільки доки до нього не сильні майже відсутні, я пробую з тих прикладів, які є в неті.
Пишу наступний код:

include "simple_html_dom.php";
$html = file_get_html('tree.html');
echo $html->find("ul li", 0)->children(1)."\n";

І замість того, щоб показати увесь мені потрібний код, воно показує лише це:

<ul>
    <li><a href="004.html" title="§ 1. Функции и их свойства">§ 1. Функции и их свойства</a> … стр. 4</li>
    <li><a href="012.html" title="§ 2. Квадратный трехчлен">§ 2. Квадратный трехчлен</a> … стр. 12</li>
    <li><a href="019.html" title="§ 3. Квадратичная функция и ее график">§ 3. Квадратичная функция и ее график</a> … стр. 19</li>
    <li><a href="032.html" title="§ 4. Степенная функция. Корень п-й степени">§ 4. Степенная функция. Корень п-й степени</a> … стр. 32</li>
  </ul>

Що потрібно зробити, щоб спарсило всі потрібні дані, а не тільки перше входження ?

Re: Питання по simple html dom

Вже розібрався, треба було використовувати наступний код:

foreach($html->find('ul') as $ul)
{
       foreach($ul->find('li') as $li)
       {
             // do something...
       }
}
Подякували: koala1

3

Re: Питання по simple html dom

Мене захоплюють такі штуки як парсери) Завтра постараюсь описати коротку статтю як використовувати одну класну лібу для витягнення даних ;)
Сходу скажу що можна зробити приблизно так:

$doc = new \Fiv\Parser\Html($code);
$items = $doc->_html('//ul//li'); 
  foreach($items as $item){
   echo $item; //вміст li
 }

4

Re: Питання по simple html dom

funivan написав:

Мене захоплюють такі штуки як парсери) Завтра постараюсь описати коротку статтю як використовувати одну класну лібу для витягнення даних ;)
Сходу скажу що можна зробити приблизно так:

$doc = new \Fiv\Parser\Html($code);
$items = $doc->_html('//ul//li'); 
  foreach($items as $item){
   echo $item; //вміст li
 }

як память на зраджує, там можна так само юзати xpath

pew pew :D
Блоґ

5

Re: Питання по simple html dom

Репозиторій https://github.com/funivan/parser/

  $doc = new \Fiv\Parser\Html($code);
  $items = $doc->_outerHtml('//ul//a[1]');

  echo "\n***" . __LINE__ . "***\n<pre>" . print_r($items, true) . "</pre>\n";

Ось результат.

Прихований текст
[0] => <a href="004.html" title="Глава I. Квадратичная функция">Глава I. Квадратичная функция</a>
[1] => <a href="004.html" title="&sect; 1. Функции и их свойства">&sect; 1. Функции и их свойства</a>
[2] => <a href="012.html" title="&sect; 2. Квадратный трехчлен">&sect; 2. Квадратный трехчлен</a>
...

Вибираємо перші елементи ;)

p.s. Покищо мало прикладів і тестів для бібілотеки. Але вона досить гнучка і проста. Якщо є питання - пишіть.

Подякували: Адріян Ігорович1