Как получить innerHTML из DOMNode - PullRequest
2 голосов
/ 13 июля 2011

Я пытаюсь заменить все элементы <foo> в DOMDocument элементами <bar>.Лучший способ сделать это, кажется, состоит в том, чтобы захватить все элементы <foo> с помощью getElementsByTagName, а затем создать новые элементы, чтобы заменить их на.элемент, который заменяется.nodeValue и textContent оба возвращают внутренний текст, но внутренние теги удаляются.Как я могу получить что-то похожее на "innerHTML" из DOMElement?

Пример кода:

function convertTags($doc, $type) {

$bad_nodes = $doc->getElementsByTagName($type); 

foreach($bad_nodes as $bad_node) {
    $good_node = $doc->createElement("bar", $bad_node->nodeValue);
    $bad_node->parentNode->replaceChild($good_node, $bad_node); 
}

return $doc;
} 

Ответы [ 3 ]

3 голосов
/ 13 июля 2011

Я думаю, что вы могли бы добиться большего, рассматривая их как реальные узлы:

$good_node = $doc->createElement('bar');
foreach( $bad_node->childNodes as $kid )
{
    $good_node->appendChild( $kid );
}
0 голосов
/ 13 июля 2011

Что произойдет, если вместо этого вы переместите все дочерние узлы вашего плохого элемента в свой хороший элемент?Разве это не может быть сделано без использования метода типа innerHTML?

Я считаю, что saveHTML () должна возвращать разметку узла, к которому вы ее применяете, если это вам поможет.

0 голосов
/ 13 июля 2011

Используйте метод DOMDocument::saveHTML() и укажите узел, который вы хотите сбросить.Если я понимаю, из какого узла в вашем примере вы хотите извлечь HTML, попробуйте что-то вроде:

foreach($bad_nodes as $bad_node) {
    $good_node = $doc->createElement("bar", $bad_node->nodeValue);
    $bad_node->parentNode->replaceChild($good_node, $bad_node); 

    // Call saveHTML on the node you want to dump.
    $doc->saveHTML($bad_node);

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