Оптимальный способ поиска и удаления узлов в DOM-объекте

Voldar

Новичок
Оптимальный способ поиска и удаления узлов в DOM-объекте

Добрый день!

Есть DOM-объект, в нем надо удалить узлы, отвечающие некоему условию (например по опраеделенному значению аттрибута). Сейчас делаю это следующим образом:

PHP:
$result = xpath_eval($context, "//item[@attr='$something']");

$size = sizeof($result->nodeset);
for($i=0;$i<$size;$i++)
{
	if($result->nodeset[$i]->tagname == 'item')
	{
		$current = $result->nodeset[$i];
		$parent = $current->parent_node();
		$parent->remove_child($current);
	}
}
Работает вполне хорошо, но хочется сделать как-то более оптимально и красиво. DOM-объект к моменту удаления уже есть, и используется дальше в коде поэтому вариант с удалением из XML regexp-ами здесь видимо не пойдет.
PHP 4.3.х, вдумчивое чтение php.net и google облегчения не принесли.
 

slach

Новичок
насчет красивее...
надо поганять на больших документах

что быстрее for или foreach для XPath nodeset

кроме того
а зачем стоит проверка
if ($result->nodeset[$i]->tagname=='item')

разве из XPath выражения итак не ясно что там всегда item?
 

Voldar

Новичок
Ну, под красивее я имел в виду не визуальную "красоту" ;)

2 slach

Да, проверка видимо действительно лишняя. А погонять for и foreach попробую сегодня, о результатах напишу.
 

Profic

just Profic (PHP5 BetaTeam)
На PHP5 я бы написал это так :)
PHP:
foreach($xp->query($context, "//item[@attr='$something']") as $node) {
    $node->parentNode->removeChild($node);
}
Красиво? :)
 

Voldar

Новичок
Ага :). Только не уверен я, что в PHP4 такое получится :( Хотя в свете того что со временем все равно на 5 переходить...

-~{}~ 04.11.04 10:47:

В общем потестировал, и foreach оказался чуть-чуть быстрее for, короче теперь код выглядит так:

PHP:
$result = xpath_eval($context, "//item[@attr='$something']") as $node);

foreach($result->nodeset as $current)
{
   $parent = $current->parent_node();
   $parent->remove_child($current);
}
Работает немного быстрее (насколько я увидел из тестирования - чем больше дерево - тем заметнее выигрыш) и читаимость заметно улучшилась. Спасибо всем.
 
Сверху