Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

XML Remove/Delete/Clear Node

1.9K
26 января 2006 года
SABROG
242 / / 26.01.2006
Стройка 6. TXMLDocument. doAutoIndent.

При добавлении новых нод к текущей она появляется не на следующей строке с отступом,а через два пробела после закрытия тага предыдущей ноды (без перевода каретки):
<temp name="test1">
<node/>
</temp><temp name="test2"><node/></temp>

В таком виде это сохраняется в файл. Когда файл читается по новой - проблем не возникает. Однако появилась ситуация когда косяки начали появлятся.
Нужно удалить ноду temp, которая содержит около 2х элементов типа node. Я удаляю родительскую таким образом:
 
Код:
xml_node->Node->GetChildNodes()->Remove(temp);


В итоге в xml файле появляются две пустые строки между нодами типа temp:
Цитата:

<temp name="test1">
<node/>
</temp>

<temp name="test1">
<node/>
</temp>


Файл в таком виде сохраняется, но считать уже корректно ничего не получается. ChildNodes->Count в этом случае начинает выдавать не существующее количество "детей", а попытка взять аттрибут name приводит к эксепшену.
Может я опций каких не установил дополнительных, что XMLDocument мне генерит кривой XML ? Проблема исчезает, когда я не ставлю doAutoIndent, но согласитесь XML в одну строку не выход из ситуации..

1.9K
26 января 2006 года
SABROG
242 / / 26.01.2006
Странный глюк. Открываю XML файл с "кривой" структурой, XMLDocument ее "выравнивает" и нормально читает.
Нельзя ли ченить вызывать, чтобы это выравнивание можно было произвести перед записью в XML файл ?
Похоже проблема все-таки не в кривости XML'ля, а где-то еще, т.к. один и тот же код выполняется по разному.
Если файл открывать и читать, то все ок. А если добавить еще одну ноду и попробывать ее потом прочитать то вылазит ошибка:
"Could not convert varian of type (Null) into type (String)". После этой ошибки я делаю SaveToFile и перечитываю эту же ноду
- все ок. Что это за глюки такие ? Мне нужно редактировать XML без сохранения в файл, т.к. я хочу оставить пользователю право на ошибку, чтобы ноды можно было добавлять/удалять без сохранения изминений, пока он сам не нажмет на кнопку Save
1
27 января 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by SABROG
Странный глюк.


Я честно говоря никогда с таким не сталкивался - но может быть это связано со способом удаления - как правило не использую конструкцию Node->GetChildNodes()->Remove(temp); а нахожу конкретный нод, проверяю на наличие дочерних и только при отсутствии удаляю

1.9K
27 января 2006 года
SABROG
242 / / 26.01.2006
Цитата:
Originally posted by kot_
Я честно говоря никогда с таким не сталкивался - но может быть это связано со способом удаления - как правило не использую конструкцию Node->GetChildNodes()->Remove(temp); а нахожу конкретный нод, проверяю на наличие дочерних и только при отсутствии удаляю


Так я специально удаляю непустые ноды, чтобы не заморачиваться со своим циклом прохода по дереву нод. Дочерние ноды автоматом удаляются. Если после удаления файл сохранить, загрузить снова и попаться прочесть, то все ок. Но если читать после удаления, то такой вот косяк вылазит.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог