Почему не отображается атрибут html через php xpath - PullRequest
0 голосов
/ 17 декабря 2018

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

<?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

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

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Если целью является получение идентификатора любого элемента класса "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 голосов
/ 17 декабря 2018

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...