1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
--TEST--
GH-9628 (Implicitly removing nodes from \DOMDocument breaks existing references) - advanced variation
--EXTENSIONS--
dom
--FILE--
<?php
$html = <<<'HTML'
<p>
<span>
<strong>
<span>
Test
</span>
</strong>
</span>
</p>
HTML;
$doc = new \DOMDocument('1.0', 'UTF-8');
$doc->loadHTML(
'<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body>' . $html . '</body></html>'
);
$xpath = new \DOMXPath($doc);
$spans = [];
foreach ($xpath->query('//span') as $span) {
$spans[] = $span;
}
\assert(\count($spans) === 2);
foreach ($spans as $span) {
\assert($span instanceof \DOMElement);
\assert($span->ownerDocument === $doc);
}
foreach ($spans as $span) {
\assert($span instanceof \DOMElement);
// This call will fail for the second `<span>`. It does not really
// matter what is accessed here, the error message will be the same.
$span->hasAttribute('test');
while ($span->childNodes->length) {
$span->removeChild($span->childNodes[0]);
}
$span->appendChild(
$span->ownerDocument->createTextNode('Hello World')
);
}
echo $spans[0]->textContent . "\n"; // Hello World
?>
--EXPECT--
Hello World
|