|
|
|||||
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Как удалить элементы XML
Здравствуйте уважаемые.
Задача в общем то простая, но почему то не могу осилить. Есть XML состоящий из корневого элемента и списка вложенных. Задача проверить все вложенные элементы и те у которых отсутствует определенный атрибут удалить из XML. в цикле прохожу по элементам delete xml.*[i]; где xml сам документ, i индекс удаляемого элемента который выбирается в обратном порядке чтобы не было глюков после удаления. Строка исполняется но при этом в самом xml как были все элементы так и остаются. Я так понимаю что xml.* возвращает XMLList и удаление уже идет из его списка, а как мне удалить из самого xml?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
|
|||||
Modus ponens
|
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Красивая конструкция)
xml.*.(attribute("valid").length() ? true : parent().replace(childIndex(), "")); xml.normalize(); attribute("valid").length() что проверяет? Я так понимаю существование атрибута, hasOwnProperty("@valid") можно использовать, я к нему как то больше привык)? или истина или заменяем текущий элемент на пустой текстовый. xml.normalize() получается все лишние текстовые узлы убивает после замены. Правильно понял?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
|
|||||
Modus ponens
|
hasOwnProperty будет аналогично работать в данном случае, наверняка даже быстрее.
attribute("attributeName") возвращает всегда XMLList, даже если атрибутов с соответстующим именем не было, т.е. нужно проверить не равняется ли длина нулю. На самом деле вместо true может быть что угодно т.как мы не используем результат фильтра в любом случае, мы просто не можем использовать if() внутри фильтра. Если условие не выполняется, то мы заменим текущий элемент "" (т.е. фактически удалим), но не совсем, т.как в таком случае будет создан пустой элемент типа текст, но если мы потом normalize()уем етот XML, то пустые текстовые элементы будут удалены.
__________________
Hell is the possibility of sanity |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Всё уж лучше:
Или вообще без normalize: Последний раз редактировалось etc; 21.05.2009 в 08:06. |
|
|||||
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Красиво)
Цитата:
Правда последнее у меня отказалось работать, стал трассироваться оказалось что все работало нормально, просто после по событию второй раз вызывалась эта же функция с другими параметрами и в итоге получал полный список без удаления. Извиняюсь что украл время, и премного благодарен за опыт. Научился еще немножко работать с xml
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
|
|||||
Регистрация: Apr 2008
Сообщений: 23
|
А если слегка усложнить задачу? Нужно удалять элементы попарно при определенном содержимом свойства, если такое же содержимое такого же свойства имеется в следующем за ним элементе.
Добавлено через 1 час 2 минуты У меня получилось так: Но удаляется только один элемент из пары. Последний раз редактировалось edge1; 03.03.2011 в 08:53. |
Часовой пояс GMT +4, время: 11:25. |
|
« Предыдущая тема | Следующая тема » |
|
|