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

sir-builder

Новичок
есть подобная структура:

PHP:
<html>
<head>
</head>
<body>

<ul>

	<li>Menu 1</li>
	<ul>
	<li>Menu 1.1</li>
	<li>Menu 1.2</li>
	<li>Menu 1.3></li>
...
	</ul>

	<li>Menu 2</li>
	<ul>
	<li>Menu 2.1</li>
	<li>Menu 2.2</li>
	<li>Menu 2.3</li>
...
	</ul>

	<li>Menu 3</li>
	<ul>
	<li>Menu 3.1</li>
	<li>Menu 3.2</li>
	<li>Menu 3.3</li>
...
	</ul>
</ul>


</body>
</html>
подскажите, как правильно организовать парсинг, что бы в итоги получить:

PHP:
Menu 1; Menu 1.1
Menu 1; Menu 1.2
Menu 1; Menu 1.3
...
Menu 2; Menu 2.1
Menu 2; Menu 2.2
Menu 2; Menu 2.3
...
Menu 3; Menu 3.1
Menu 3; Menu 3.2
Menu 3; Menu 3.3
...
 

korpus

злой бобёр
Пытаюсь использовать DOMElement ссылка
Прошу прощения, если что то не правильно сформулировал!
DOM используется для парсинга XML. У вас же просто HTML. Здесь следует использовать регулярные выражения. Сначала скачиваете нужный HTML-документ с помощью CURL, например, потом полученную строку разбираете регулярными выражениями.
 

Absinthe

жожо
sir-builder а с какой целью парсишь документ? Достаешь с другого сайта данные?
 

sir-builder

Новичок
sir-builder а с какой целью парсишь документ? Достаешь с другого сайта данные?
Absinthe данные я не достаю. Это данные предоставляемые поставщиком, на выбор HTML или XLS. К сожалению варианта с XML нет.

DOM используется для парсинга XML. У вас же просто HTML. Здесь следует использовать регулярные выражения. Сначала скачиваете нужный HTML-документ с помощью CURL, например, потом полученную строку разбираете регулярными выражениями.
Korpus наверно вы правы, собственно в данный момент разбор так и организован. Тем не менее PHP DOM инструмент для парсинга как XML, так и HTML и для более строгого парснга мне кажется лучше использовать именно его.
 

korpus

злой бобёр
sir-builder а с какой целью парсишь документ? Достаешь с другого сайта данные?
sir-builder признайся, что ты контент с сайта слямзить хочешь. Мы же тут все чего-то с сайтов парсим, а потом на свои сайты ставим. Или сайты взламываем. Потом опытом друг с другом делимся. Обычная программистская практика...

Korpus наверно вы правы, собственно в данный момент разбор так и организован. Тем не менее PHP DOM инструмент для парсинга как XML, так и HTML и для более строгого парснга мне кажется лучше использовать именно его.
HTML-код, в отличие от XML, может содержать ошибки, например. некорректная вложенность элементов. Поэтому его парсинг значительно сложнее, чем XML.
 

korpus

злой бобёр
Вообще PHP DOM мне так кажется только для XML. Может быть для XHTML его как-то можно будет использовать. Обычный HTML им не парсят.
 

sir-builder

Новичок
Мое решение для
PHP:
<html>
<head>
</head>
<body>

<ul>

	<li><b>Menu 1</b></li>
	<ul>
	<li><a href="#1.1">Menu 1.1</a></li>
	<li><a href="#1.2">Menu 1.2</a></li>
	<li><a href="#1.3">Menu 1.3</a></li>
	</ul>

	<li><b>Menu 2</b></li>
	<ul>
	<li><a href="#2.1">Menu 2.1</a></li>
	<li><a href="#2.2">Menu 2.2</a></li>
	<li><a href="#2.3">Menu 2.3</a></li>
	</ul>

	<li><b>Menu 3</b></li>
	<ul>
	<li><a href="#3.1">Menu 3.1</a></li>
	<li><a href="#3.2">Menu 3.2</a></li>
	<li><a href="#3.3">Menu 3.3</a></li>
	</ul>
</ul>


</body>
</html>
PHP:
<?php

$html = '*.html';
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->strictErrorChecking=false;
$dom->recover = true;

$file = @ $dom->loadHTMLFile($html);

$ul_dom = $dom->getElementsByTagName('ul')->item(0);
foreach ($ul_dom->getElementsByTagName('*') as $current) {
	foreach ($current->getElementsByTagName('b') as $b) {
			$b_value = utf8_decode($b->nodeValue);
		}
	foreach ($current->getElementsByTagName('li') as $li) {
		$li_value = utf8_decode($li->nodeValue);
		$a_value = $li->getElementsByTagName('a');
		$a_attribute = $a_value->item(0)->getAttribute('href');
		
		$hesh{$a_attribute}{1}=$b_value;
		$hesh{$a_attribute}{2}=$li_value;
	}
}
?>
 
Сверху