DOMDocument: найти div, получить содержимое и распечатать без div - PullRequest
1 голос
/ 30 января 2012

Я хотел бы использовать DOMDocument или другой предложенный метод для выполнения следующих действий в WordPess:

Этот HTML-файл сохранен в переменной:

<div id="gallery-3232" class="gallery gallery-3232">
<li><a href=""><img src="" alt="" /></li>
<li><a href=""><img src="" alt="" /></li>
<li><a href=""><img src="" alt="" /></li>
<li><a href=""><img src="" alt="" /></li>
</div>

И я хотел бы получить переменную, содержащую это:

<li><a href=""><img src="" alt="" /></li>
<li><a href=""><img src="" alt="" /></li>
<li><a href=""><img src="" alt="" /></li>
<li><a href=""><img src="" alt="" /></li>

Как я могу это сделать, но без JavaScript. С использованием PHP.

Thabnk you

Ответы [ 3 ]

2 голосов
/ 30 января 2012

Я только что проверил это, я думаю, это то, что вам нужно.Загрузите HTML-код в DOMDocument, получите нужный элемент по идентификатору, а затем выполните итерации по его дочерним узлам и выведите:

$html = '<div id="gallery-3232" class="gallery gallery-3232">
<li><a href=""><img src="" alt="" /></li>
<li><a href=""><img src="" alt="" /></li>
<li><a href=""><img src="" alt="" /></li>
<li><a href=""><img src="" alt="" /></li>
</div>
';

$doc = new DomDocument();
$doc->loadHtml($html);
$div = $doc->getElementById('gallery-3232');
$output = '';
foreach($div->childNodes as $element)
{
    $output .= $element->ownerDocument->saveHtml($element);
}
echo $output;
2 голосов
/ 30 января 2012
$source = '<div id="gallery-3232" class="gallery gallery-3232">
            <li><a href=""><img src="" alt="" /></li>
            <li><a href=""><img src="" alt="" /></li>
            <li><a href=""><img src="" alt="" /></li>
            <li><a href=""><img src="" alt="" /></li>
            </div>';

$list = new DOMDocument();
$list->loadHTML($source);

$listItems = $list->getElementsByTagName('li');

$listString = "";

foreach ($listItems as $list) {
    $listString .= $list->C14N();
}

echo $listString;
1 голос
/ 30 января 2012

Вот быстрый и грязный способ с использованием регулярного выражения:

$string = preg_replace('~</?div[^>]*>~', '', $string);

Примечание: , как я уже сказал, это быстрый и грязный способ.Если вы уверены в своем мнении - используйте это.Однако, если вы фильтруете неопределенный ввод, вам лучше будет его правильно проанализировать.

...