Intereting Posts
Deserialize xml для объекта с Symfony2 Использование имени домена вместо localhost внутри с https в xampp Продолжайте получать ошибку при попытке вставить данные формы в базу данных с PDO Проблема в поддержании сеанса между двумя разными доменами на веб-сайте, выполненном в CakePHP Как повысить производительность с помощью Vim и Eclipse для проектов PHP5.3 (возможно, используя интеграцию Eclim с Zend Studio) настройка базы данных для отслеживания того, какие пользователи нажали на какие ссылки? PHP: доступ к Bluetooth GPS через последовательный порт (SPP) COM3 Многопользовательский поисковый запрос PHP MySQL с использованием опции / выбора тегов HTML-формы Функция php array_key_exists и регулярные выражения Проблемы с правильной позицией заголовков таблиц Диаграмма Google добавляет еще один график рядом друг с другом PHP Curl не работает над AppEngine Как подсчитать количество строк в Zend Framework 2 Как вы получаете идентификатор респондента из опроса Monkey Survey? Простой пример кометы с использованием php и jquery

Как анализировать HTML в PHP?

Я знаю, что мы можем использовать PHP DOM для анализа HTML с помощью PHP. Здесь я нашел много вопросов и в stackoverflow. Но у меня есть специальное требование. У меня есть HTML-контент, как показано ниже.

<p class="Heading1-P"> <span class="Heading1-H">Chapter 1</span> </p> <p class="Normal-P"> <span class="Normal-H">This is chapter 1</span> </p> <p class="Heading1-P"> <span class="Heading1-H">Chapter 2</span> </p> <p class="Normal-P"> <span class="Normal-H">This is chapter 2</span> </p> <p class="Heading1-P"> <span class="Heading1-H">Chapter 3</span> </p> <p class="Normal-P"> <span class="Normal-H">This is chapter 3</span> </p> 

Я хочу проанализировать приведенный выше HTML и сохранить его в двух разных массивах:

$heading и $content

 $heading = array('Chapter 1','Chapter 2','Chapter 3'); $content = array('This is chapter 1','This is chapter 2','This is chapter 3'); 

Я могу добиться этого, просто используя jQuery. Но я не уверен, это правильный путь. Было бы здорово, если бы кто-то мог указать мне в правильном направлении. Заранее спасибо.

Попробуйте взглянуть на PHP Simple HTML DOM Parser

Он имеет яркий синтаксис, похожий на jQuery, поэтому вы можете легко выбрать любой элемент, который вы хотите по ID или классу

Я использовал domdocument и domxpath для получения решения, вы можете найти его на:

 <?php $dom = new DomDocument(); $test='<p class="Heading1-P"> <span class="Heading1-H">Chapter 1</span> </p> <p class="Normal-P"> <span class="Normal-H">This is chapter 1</span> </p> <p class="Heading1-P"> <span class="Heading1-H">Chapter 2</span> </p> <p class="Normal-P"> <span class="Normal-H">This is chapter 2</span> </p> <p class="Heading1-P"> <span class="Heading1-H">Chapter 3</span> </p> <p class="Normal-P"> <span class="Normal-H">This is chapter 3</span> </p>'; $dom->loadHTML($test); $xpath = new DOMXpath($dom); $heading=parseToArray($xpath,'Heading1-H'); $content=parseToArray($xpath,'Normal-H'); var_dump($heading); echo "<br/>"; var_dump($content); echo "<br/>"; function parseToArray($xpath,$class) { $xpathquery="//span[@class='".$class."']"; $elements = $xpath->query($xpathquery); if (!is_null($elements)) { $resultarray=array(); foreach ($elements as $element) { $nodes = $element->childNodes; foreach ($nodes as $node) { $resultarray[] = $node->nodeValue; } } return $resultarray; } } 

Результат: http://saji89.codepad.org/2TyOAibZ

Один из вариантов для вас – использовать DOMDocument и DOMXPath. Для этого требуется немного кривая, чтобы узнать, но как только вы это сделаете, вы будете довольны тем, чего вы можете достичь.

Прочтите следующее в php.net

http://php.net/manual/en/class.domdocument.php

http://php.net/manual/en/class.domxpath.php

Надеюсь это поможет.

// Создаем DOM из URL или файла

 $html = file_get_html('http://www.google.com/'); 

// Найти все изображения

 foreach($html->find('img') as $element) echo $element->src . '<br>'; 

// Найти все ссылки

 foreach($html->find('a') as $element) echo $element->href . '<br>';