Как я должен получить подобное содержимое div, используя dom в php?

#php #dom

#php #dom

Вопрос:

Div выглядит следующим образом

 <div style="width:90%;margin:0 auto;color:#Black;" id="content">
this is text, severaltags
</div> 
  

как я должен получить содержимое div, включая
теги, используя dom в php?

Комментарии:

1. php.net/manual/en/domxpath. query.php имеет несколько хороших примеров

2. domxpath или регулярное выражение

3. содержимое div или div, имеющий id=content

Ответ №1:

Предполагая, что вы используете PHP5, вы можете использовать DOMDocument — обратите внимание, что это не предоставляет простых средств для извлечения внутреннего html элемента. Вы можете сделать что-то вроде следующего:

 function DOMinnerHTML($element) 
{ 
    $innerHTML = ""; 
    $children = $element->childNodes; 
    foreach ($children as $child) 
    { 
        $tmp_dom = new DOMDocument(); 
        $tmp_dom->appendChild($tmp_dom->importNode($child, true)); 
        $innerHTML.=trim($tmp_dom->saveHTML()); 
    } 
    return $innerHTML; 
} 

$dom = new DOMDocument();

$dom->loadHTML($html);

$items = $dom->getElementsByTagName('div');
if ($items->length)
{
    $innerHTML = DOMinnerHTML($items->item(0));
}

echo $innerHTML;
  

Для чего-то такого простого, хотя я обычно не рекомендую это, я бы использовал regex:

 preg_match('|<div[^>] >(.*?)</div>|is', $html, $match);

if ($match)
{
    echo 'html is: ' . $match[1][0];
}
  

Комментарии:

1.Хороший подход. В вашей функции DOMinnerHTML вы могли бы использовать свойство ownerDocument (связанный объект DOMDocument), которое уже определено для каждого объекта DOMNode и DOMElement. т.Е. вы могли бы просто поместить в свой цикл foreach: $innerHTML .= $child->ownerDocument->saveXML( $child ); source

2. Хороший кацуо! Не знал о ownerDocument

3. да! это довольно удобно! Вот почему я хотел упомянуть об этом здесь.

Ответ №2:

Что-то вроде этого?

 $document = new DOMDocument();
$document->loadHTML($html);

$element = $document->getElementById('content');
  

Ответ №3:

Чтобы получить значения, вы можете попробовать что-то вроде этого

 $doc = new DOMDocument();
$doc->loadHTMLFile('link-t0-html-file.php');
$xpath = new DOMXPath($doc);
$element = $xpath->query("//*[@id='content']")->item(0);
echo $element->nodeValue;
  

Ответ №4:

если я не ошибаюсь, вы хотите это

 echo "< div style='width:90%;margin:0 auto;color:#000000;font-size:14px;line-height:24px;' 
id='content'>";

echo "this is text, several `<br/>` tags";

echo "< /div>"; 
  

просто имейте в виду, что никогда не используйте двойную кавычку («) внутри двойной кавычки («). используйте одинарную кавычку (‘) внутри двойной кавычки.