Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > getElementById по вставленным веткам


Автор: NTMan 19.6.2008, 17:23
День добрый!
Суть проблемы такова, что есть html файл и массив с id-шками и html-кусками которые надо вставить в html файл.
getElementById прекрасно находит узлы по Id-шкам в первоначальном файле, но пасует, когда дело касается вставленных узлов.
Продемонстрирую это примером:
Код

<?php
$pagecode = <<<EOT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<meta content='text/html; charset=windows-1251' http-equiv='Content-Type'>
</HEAD>
<BODY>
<H1>Это просто пример статичной части</H1>
<div id='dyn1'><u>Начинается динамика здесь!</u></div>
</BODY>
</HTML>
EOT;

$htmlarr["dyn1"] = iconv('windows-1251', 'UTF-8','Это <div id="dyn2"></div>первый блок');
$htmlarr["dyn2"] = iconv('windows-1251', 'UTF-8','уже не ');
$doc = new DOMDocument('1.0', 'WINDOWS-1251');
$doc->validateOnParse = true;
$doc->loadHTML($pagecode);
foreach ($htmlarr as $divid => $htmlcode)
{
    $ChangeNode = $doc->getElementById($divid);
    if (isset($ChangeNode))
    {
        $f = $doc->createDocumentFragment();
        $f->appendXML($htmlcode);
        $ChangeNode->appendChild($f);

    }
}
echo $doc->saveHTML();
?>


В результате выполнения в div с id='dyn1' подставиться "Это <div id="dyn2"></div>первый блок", а в 'dyn2' ничего не подставиться, хотя по логике вещей должно было бы.

Вопросы:
1) как сделать чтобы, в 'dyn2' подставилось "уже не "??
2) Если не указать заголовок "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">" то getElementById вообще не работает, есть ли возможность этого избежать? Т.е. сделать getElementById толерантным ко всяким заголовкам.

Автор: pgood 21.7.2008, 15:22
Попробуй xpath вместо getElementById;

Если не вкурсе, вот аналог getElementById:

Код


$xpc = new DOMXPath($doc); //где $doc - DOMDocument

$result = $xpc->query('//*[@id="айди элемента"]');

$element = $result->item(0);





Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)