@mirexdoors

Как правильно распарсить?

На странице есть несколько div с классом "issue" и id вида "id=issue4" необходимо сохранять содержимое каждого div в отдельный файл. Делаю так:
$nodes = $dom->execute('div.issue>div'); //выборка потомков <div class="issue">

$page ='';
foreach ($nodes as $node) {
	
	$rawContent = $node->C14N();
	$parent = $node->parentNode;

	$content =html_entity_decode($rawContent);//преобразуем юникод в html

	if ($parent == $node->nextSibling->parentNode) {
		$page .= $content;
	$id =$parent->getAttribute('id'); //значение id
	

	$num = substr($id, 5); //обрезаем "issue"

	
	$fp = fopen($catalog . '/' . $num . '.html', "w"); //создание файла
	fwrite($fp, $page); //запись
	fclose($fp); //закрытие
	}
}


но так в каждый файл записывается одинаковый контент. Не могу сообразить, как сделать проверку по родителю?
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
@mirexdoors Автор вопроса
Решил проблему выборкой родителя
$nodes = $dom->execute('div.issue'); //выборка <div class="issue">


foreach ($nodes as $node) {
	
	$rawContent = $node->childNodes;
	foreach ($rawContent as $value) {
		$page .=$value->C14N();
	}

	$parent = $node->parentNode;

	$content =html_entity_decode($page);//преобразуем юникод в html

		$id = $node->getAttribute('id'); //значение id
		$num = substr($id, 5); //обрезаем "issue"
		

$fp = fopen($catalog . '/' . $num . '.html', "w"); //создание файла
		fwrite($fp, $content); //запись
		fclose($fp); //закрытие
$page='';
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
JabbaHotep
@JabbaHotep
Пытаюсь минимизировать ручную работу
Не скажу что хорошо понимаю в PHP, но судя по логике у Вас странное условие ($parent == $node->nextSibling->parentNode), по-моему явно не хватает else
if ($parent == $node->nextSibling->parentNode) {
    $page .= $content;
  } else {
    $id =$parent->getAttribute('id'); //значение id
    $num = substr($id, 5); //обрезаем "issue"
    $fp = fopen($catalog . '/' . $num . '.html', "w"); //создание файла
    fwrite($fp, $page); //запись
    fclose($fp); //закрытие
    $page = "";
  }


Еще наверное имеет смысл проверять есть ли $node->nextSibling перед тем как забирать его parentNode. Не знаю насколько это критично в PHP.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы