replace_node без перемещения - ?

  • Автор темы Igor Ageyev
  • Дата начала

Igor Ageyev

Guest
replace_node без перемещения - ?

У меня следующий баг:

1) выполняю замену одного узла на другой с помощью $oldNode->replace_node ($newNode);

2) замена происходит, но элемент меняет свою позицию в иерархии своих братьев (он становится последним элементом в родительском узле).

Можно ли избежать перемещения узла?

-~{}~ 08.11.04 00:30:

Ложная тревога.
Баг был по моей вине.
replace_node здесь не причем.

Хотел удалить пост, но видимо прав не имею.
 

slach

Новичок
ну и не удаляй =)
вдруг у кого нибудь аналогичные проблемы будут

лучше объясни в чем именно был баг??
и почему ты сначала стал грешить на replace_node
 

Igor Ageyev

Guest
1) Написал для своего класса метод, который должен изменять узлы.

2) В качестве параметров метод получает – значение атрибута id родительского узла и еще несколько атрибутов изменяемого узла.
Первый параметр задается для того чтобы определить изменил ли редактируемый узел положение в xml документе.

3) Т.е. сначала с помощью xpath нахожу изменяемый элемент, потом определяю его родителя с помощью parent_node() и узнаю id-ник этого родителя при помощи get_attribute ("id").

4) Полученный id сравниваю с тем, который был задан первым параметром (старый id-ник). Если они равны, происходит просто замена узла с использованием replace_node, если не равны узел удаляется (unlink_node()) и создается на новом месте (create_element(), set_attribute(), append_child()).

5) Все работало пока изменяемый узел не оказывался в корневом узле, у которого НЕ БЫЛО НИКАКОГО АТТРИБУТА id

6) При этом если родитель и прежде был корневым узлом параметром в методе шел уже не id, а ключевое слово “root” (которое конечно не равно “”, возвращаемое при отсутствии атрибута) и в таком случае выполнялся не replace_node, а его удаление и создание нового (само собой он становился последним элементом, т.е. менял свою позицию).

Я исправил ситуацию просто проверкой является ли родительский узел корневым.
 
Сверху