У меня есть вопрос, касающийся вашего вопроса, который слишком сложен для поля комментариев.
Как вы хотите вписать данные атрибутов в это? Вам понадобится Whory Table & trade; как
array('html', null, array (
array( 'div' , null , array(
array('ul', array('id'=>'foo'), array(
array('li', null, 'foo' ),
array('li', null, array(
array(null,null, 'bar'),
array('ul', null, array(
array('li', null, 'sub-bar' )
))
))
))
))
))
));
, потому что это минимальная структура, необходимая для точного программного представления набора данных HTML.
Я немного обманул, исключив необходимость в элементах "text-node", сделав предположение, что
массив (имя, атрибут, дочерние элементы)
содержит строку вместо массива для потомков, а затем неявный текстовый узел,
и что узлы с именем == null не имеют тегов и, таким образом, также являются текстовыми узлами.
Я думаю, что вы хотите, чтобы это был правильный программный инструмент для создания DOM, который будет анализировать некоторые существующие HTML в дерево, чтобы облегчить вашу жизнь
FWIW, приведенная выше структура может быть легко преобразована в html.
function tohtml( $domtree ){
if( is_null($domtree[0]) ){
if( !is_array($domtree[2])){
return htmlentities($domtree[2]);
}
die("text node cant have children!");
}
$html = "<" . $domtree[0];
if( !is_null( $domtree[1] ) )
{
foreach( $domtree[1] as $name=>$value ){
$html .= " " . $name . '="' . htmlentities($value) . '"';
}
}
$html .= ">" ;
if( !is_null($domtree[2]) ){
if( is_array($dometree[2]) ){
foreach( $domtree[2] as $id => $item ){
$html .= tohtml( $item ); # RECURSION
}
}
else {
$html .= htmlentities($domtree[2]);
}
}
$html .= "</" . $domtree[1] . ">";
return $html;
}