ID: 46265
User updated by: josh at coady dot us
Reported By: josh at coady dot us
Status: Open
Bug Type: DOM XML related
Operating System: ubuntu 8.04.1
PHP Version: 5.2.6
New Comment:
reproduce code should be the following (I realized the code wasnt
duplicating the exact situation I was encountering, so I modified it to
better match)
$doc =
DOMDocument::loadXML('<doc><x><a>1</a></x><x><a>1</a><y><a>1</a><a>0</a></y></x></doc>');
$nodes = $doc->getElementsByTagName('a');
$nodesToRemove = array();
foreach($nodes as $node)
{
if($node->nodeValue == 1)
{
$nodesToRemove[] = $node;
}
}
foreach($nodesToRemove as $node)
{
$node->parentNode->parentNode->removeChild($node->parentNode);
}
Previous Comments:
------------------------------------------------------------------------
[2008-10-09 19:17:38] josh at coady dot us
Description:
------------
DOMNode should have a property like $exists to check if the node still
exists. This would be useful to avoid the "Node no longer exists"
warning.
We should be able to do something like
$node->parentNode->removeChild($node);
if($node->exists)
{
// use node ..
}
Reproduce code:
---------------
$doc =
DOMDocument::loadXML('<doc><x><a>1</a></x><x><a>1</a><y><a>1</a><a>0</a></y></x></doc>');
$nodes = $doc->getElementsByTagName('a');
$nodesToRemove = array();
foreach($nodes as $node)
{
if($node->nodeValue == 1)
{
$nodesToRemove[] = $node;
$node->parentNode->removeChild($node);
}
}
foreach($nodesToRemove as $node)
{
$node->parentNode->removeChild($node);
}
Expected result:
----------------
This is more of a feature request. I expect to change the last loop to
something like
foreach($nodesToRemove as $node)
{
if($node->exists)
{
$node->parentNode->removeChild($node);
}
}
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=46265&edit=1