Здравствуйте. У меня есть строка с html тегами таблицы. Задача разбить строчку на массив по тегам с их содержимым. Пример:
<table>
<tr>
<td>
<table>
<tr>
<td>Текст ячейки №1</td>
<td>Текст ячейки №2</td>
</tr>
</table>
</td>
<td>
<table>
<tr>
<td></td>
</tr>
</table>
</td>
</tr>
</table>
Нашёл решение по ссылке a link:
function walk($output, \DOMNode $node, $depth = 0)
{
if ($node->hasChildNodes()) {
$children = $node->childNodes;
foreach ($children as $child) {
if ($child->nodeType === XML_TEXT_NODE) {
continue;
}
$output[] = $child->nodeName;
$item = walk(array(), $child, $depth + 1);
if (!empty($item)) {
$output[] = $item;
}
}
}
return $output;
}
$dom = new DOMDocument;
$dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
$root = $dom->getElementsByTagName('body')->item(0);
$output = walk(array(), $root, 0);
Всё работает, как нужно и выводит только теги в следующем формате:
["table",["tr",["td",["table",["tr",["td","td"] ...
Вопрос заключается в выводе содержимого(не атрибутов) этих тегов. Типа:
["table":"",["tr":"",["td":"",["table":"",["tr":"",["td":"Текст ячейки №1","td":"Текст ячейки №2"] ...
Пробовал:
array_push($output, array(
$child->nodeName => $child->textContent));
на выходе:
["table":"Текст ячейки №1Текст ячейки №2 ...
решил так:
function walk($output, \DOMNode $node, $depth = 0)
{
if ($node->hasChildNodes()) {
$children = $node->childNodes;
foreach ($children as $child) {
if ($child->nodeType === XML_TEXT_NODE) {
$output[] = $child->textContent; // заменил тело в условии
}
$output[] = $child->nodeName;
$item = walk(array(), $child, $depth + 1);
if (!empty($item)) {
$output[] = $item;
}
}
}
return $output;
}
$dom = new DOMDocument;
$dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
$root = $dom->getElementsByTagName('body')->item(0);
$output = walk(array(), $root, 0);
$name = html_entity_decode(str_replace('\u','&#x',$output[1][1][1][1][1][1][0]), ENT_NOQUOTES,'UTF-8'); // для декодирования json формата кириллицы типа - \u041d\u043e\u043c\u0435\u0440
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Доброго времени суток, возник вопросКак выровнять legend по центру fieldset?
По какой причине может не отображаться неразрывный пробел в шрифте и как это исправить? Использую локально подключенный шрифт "Futuris"При...
Два года назад была создана база, сейчас хочется ее немного привести в порядок