PHP DOMDocument извлекает теги - PullRequest
5 голосов
/ 17 сентября 2008

Я работаю над небольшим движком шаблонов и использую DOMDocument для разбора страниц. Моя тестовая страница до сих пор выглядит так:

<block name="content">

   <?php echo 'this is some rendered PHP! <br />' ?>

   <p>Main column of <span>content</span></p>

</block>

И часть моего класса выглядит так:

private function parse($tag, $attr = 'name')
{
    $strict = 0;
    /*** the array to return ***/
    $out = array();
    if($this->totalBlocks() > 0)
    {
        /*** a new dom object ***/
        $dom = new domDocument;
        /*** discard white space ***/
        $dom->preserveWhiteSpace = false;

        /*** load the html into the object ***/
        if($strict==1)
        {
            $dom->loadXML($this->file_contents);
        }
        else
        {
            $dom->loadHTML($this->file_contents);
        }

        /*** the tag by its tag name ***/
        $content = $dom->getElementsByTagname($tag);

        $i = 0;
        foreach ($content as $item)
        {
            /*** add node value to the out array ***/
            $out[$i]['name'] = $item->getAttribute($attr);
            $out[$i]['value'] = $item->nodeValue;
            $i++;
        }
    }

    return $out;
}

Он работает так, как я хочу, так как он захватывает каждый на странице и внедряет его содержимое в мой шаблон, однако он удаляет теги HTML внутри , возвращая следующее без

или теги:

this is some rendered PHP! Main column of content

Что я здесь не так делаю? :) Спасибо

1 Ответ

9 голосов
/ 17 сентября 2008

Ничего: nodeValue - это конкатенация части дерева значений и никогда не будет иметь тегов.

То, что я хотел бы сделать, чтобы сделать HTML-фрагмент дерева в $ node, это:


$doc = new DOMDocument();
foreach($node->childNodes as $child) {
    $doc->appendChild($doc->importNode($child, true));
}
return $doc->saveHTML();

HTML-фрагменты на самом деле более проблематичны, чем вы думаете на первый взгляд, потому что в них, как правило, отсутствуют такие вещи, как типы документов и наборы символов, что затрудняет детерминистический переход назад и вперед между частями дерева DOM и фрагментами HTML. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...