@Shimpanze

Как проверить наличие атрибута у текущего элемента в цикле?

Здравствуйте!

Достаю необходимые мне элементы:

$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DomXPath($dom);
$elements = $xpath->query('//article/node()');


Теперь, мне необходимо вычистить из них все атрибуты кроме избранных (href, src и т. д.) и вернуть:

$content = '';
foreach($elements as $element) {
    while ($element->hasAttributes()) {
        $element->removeAttributeNode($element->attributes->item(0));
    }
$content .= ...;
}

echo $content;


Дальше этого дело не идёт...

Буду благодарен за помощь.
  • Вопрос задан
  • 385 просмотров
Решения вопроса 1
DevMan
@DevMan
$html = <<<'HTML'
<article>
	<p rel="#" src="#">aaaaaa</p>
	<p href="#" bla="#" bla2="#">bbbbbb</p>
</article>
HTML;

$dom = new DOMDocument;
@$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DomXPath($dom);
$elements = $xpath->query('//article/*');

$allowedAttributes = ['src', 'href'];
foreach($elements as $element) {
	for( $i = $element->attributes->length; --$i >= 0; ) {
		if( ! in_array( $element->attributes->item($i)->name, $allowedAttributes ) ) {
			$element->removeAttribute($element->attributes->item($i)->name);
		}
	}
}
echo $dom->saveHTML();
https://3v4l.org/UPrsr
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы