Я знаю, что мы можем использовать 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>';