Почему не отображается атрибут html через переполнение стека xpath

Почему не отображается атрибут html через php xpath

<?php
$content = '<div class="keep-me">Keep this div</div><div class="remove-me" id="test">Remove this div</div>';
$badClasses = array('');

$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($content);
libxml_clear_errors();
$xPath = new DOMXpath($dom);

foreach($badClasses as $badClass){
$domNodeList = $xPath->query('//div[@class="remove-me"]/@id');

$domElemsToRemove = ''; // container of deleted elements
foreach ( $domNodeList as $domElement ) {
$domElemsToRemove .= $dom->saveHTML($domElement); // concat them
$domElement->parentNode->removeChild($domElement); // then remove
}

}

$content = $dom->saveHTML();
echo htmlentities($domElemsToRemove);
?>

Работает — // div [@ class = «remove-me»] или // div [@ class = «remove-me»] / text ()

Не работает — // div [@ class = «remove-me»] / @ id

Может быть, есть способ проще

0

Решение

XPath //div[@class="remove-me"]/@id правильно, но вам нужно просто зациклить возвращенные элементы и добавить nodeValue к списку совпадающих идентификаторов …

$xPath = new DOMXpath($dom);

$domNodeList = $xPath->query('//div[@class="remove-me"]/@id');

$ids = []; // container of deleted elements
foreach ( $domNodeList as $domElement ) {
$ids[] = $domElement->nodeValue;
}

print_r($ids);
0

Другие решения

Если целью является получение идентификатора любого элемента с классом "remove-me" как это, как я интерпретирую вопрос, то, возможно, вы можете попробовать, как это — непроверенный кстати …

…. другой код перед

$xp=new DOMXpath( $dom );
$col= $xp->query( '*[@class="remove-me"]' );
if( $col->length > 0 ){
foreach($col as $node){
$id=$node->hasAttribute('id') ? $node->getAttribute('id') : 'banana';
echo $id;
}
}

однако рассмотрение кода в вопросе предполагает, что вы хотите удалить узлы — в этом случае создать массив узлов (список узлов) и выполнить итерацию по нему от конца к началу — то есть: назад …

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector