2014-10-05 2 views
1

Я хотел бы изменить сам тег, указанный в QueryPath. Чтобы быть конкретным, я хотел бы преобразовать якорь тег, как этот
<a href="abc.html">Example</a>
в
<?php Blah-Blah ?>Example</a>
или
<?php Blah-Blah2 ?>Как изменить сам тег в QueryPath?

я могу найти якорный тег и получить его элемент:
$qp->find('a[href]'); $href = $qp->attr('href');
но то есть ли способ изменить/заменить сам тег в QueryPath?

В качестве альтернативы он меня устраивает, чтобы обернуть компонент с <div id="specific"> тегом - если это возможно, я полагаю, я могу искать его с $qp->top('div[id="specific"]');, то может заменить весь ребенок (якорный тег и его элемент) с PHP код.

Однако мне не удалось найти ни путь в QueryPath ...

ответ

3
function renameTag(DOMElement $oldTag, $newTagName) { 
    $document = $oldTag->ownerDocument; 

    $newTag = $document->createElement($newTagName); 
    $oldTag->parentNode->replaceChild($newTag, $oldTag); 

    foreach ($oldTag->attributes as $attribute) { 
     $newTag->setAttribute($attribute->name, $attribute->value); 
    } 
    foreach (iterator_to_array($oldTag->childNodes) as $child) { 
     $newTag->appendChild($oldTag->removeChild($child)); 
    } 
    return $newTag; 
} 

и

$qp->find('a[href]')->each(function($index,$element){ 
    renameTag($element,'?php'); 
}); 

вы должны итерацию для всех элементов в запросе ...

+0

Как вы создаете '$ anchors' из объекта QueryPath, скажем,' $ qp', который создается, например, с помощью 'htmlqp ($ HtmlString)'? Я могу найти конкретный якорь с '$ qp-> find ('a [href]')' и т. Д., Но он все еще является объектом QueryPath ... –

+0

'$ anchors = $ qp-> find ('a [href]') ; ' i обновил ответ –

+0

В PHP Вер.5.5.3 он вызывает ошибку' WD php: DOMException: Недопустимая ошибка символов в DOMDocument-> createElement() '. Если я изменю '? Php' на' p', результат будет таким, как ожидалось. Но, похоже, '' php' не принимается для функции. . Н.Б., я использовал следующие действия для создания '$ qp':' $ QP = htmlqp (' ни

Example Anchor

'); ' –