#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 );
source2. Хороший кацуо! Не знал о 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>";
просто имейте в виду, что никогда не используйте двойную кавычку («) внутри двойной кавычки («). используйте одинарную кавычку (‘) внутри двойной кавычки.