получение нескольких элементов по имени тега и проверка элементов тега в цикле, повторяя его - PullRequest
6 голосов
/ 26 октября 2011

Это пример кода, который работает

$doc->loadHTML($article_header);
$imgs = $doc->getElementsByTagName('img');
foreach ($imgs as $img) {

$imgs берет $doc элементов с именем тега img, а затем я делаю некоторые операции.

Теперь я хочуgetElementsByTagName> img ИЛИ iframe, а затем с помощью $ img проверьте, какой это элемент, и просмотрите его, если это iframe или img.

Пожалуйста, измените мой код, если это возможно.

Ответы [ 2 ]

11 голосов
/ 26 октября 2011

Вы можете использовать XPath в DOMDocument следующим образом:

$doc->loadHTML($article_header);
$xpath = new DOMXpath($doc);

$imagesAndIframes = $xpath->query('//img | //iframe');

$length = $imagesAndIframes->length;
for ($i = 0; $i < $length; $i++) {
    $element = $imagesAndIframes->item($i);

    if ($element->tagName == 'img') {
        echo 'img';
    } else {
        echo 'iframe';
    }
}
0 голосов
/ 26 октября 2011

Лучше использовать следующий способ, поскольку при использовании этого кода вы не получите никакой ошибки, если в объекте "$doc" нет тега "iframe" / "img" (так как вы прекрасно проверяете наличие любых элементов, используя функцию "count()"): -

$doc->loadHTML($article_header);
$imgs = $doc->getElementsByTagName('img');
$iframes = $doc->getElementsByTagName('iframe');

if (count($imgs)) {
    foreach ($imgs as $img) {
        // Do some logic on "img" tag
    }
}

if (count($iframes)) {
    foreach ($iframes as $iframe) {
        // Do some logic on "iframe" tag
    }
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...