XML Remove/Delete/Clear Node
При добавлении новых нод к текущей она появляется не на следующей строке с отступом,а через два пробела после закрытия тага предыдущей ноды (без перевода каретки):
<temp name="test1">
<node/>
</temp><temp name="test2"><node/></temp>
В таком виде это сохраняется в файл. Когда файл читается по новой - проблем не возникает. Однако появилась ситуация когда косяки начали появлятся.
Нужно удалить ноду temp, которая содержит около 2х элементов типа node. Я удаляю родительскую таким образом:
В итоге в xml файле появляются две пустые строки между нодами типа temp:
<temp name="test1">
<node/>
</temp>
<temp name="test1">
<node/>
</temp>
Файл в таком виде сохраняется, но считать уже корректно ничего не получается. ChildNodes->Count в этом случае начинает выдавать не существующее количество "детей", а попытка взять аттрибут name приводит к эксепшену.
Может я опций каких не установил дополнительных, что XMLDocument мне генерит кривой XML ? Проблема исчезает, когда я не ставлю doAutoIndent, но согласитесь XML в одну строку не выход из ситуации..
Нельзя ли ченить вызывать, чтобы это выравнивание можно было произвести перед записью в XML файл ?
Похоже проблема все-таки не в кривости XML'ля, а где-то еще, т.к. один и тот же код выполняется по разному.
Если файл открывать и читать, то все ок. А если добавить еще одну ноду и попробывать ее потом прочитать то вылазит ошибка:
"Could not convert varian of type (Null) into type (String)". После этой ошибки я делаю SaveToFile и перечитываю эту же ноду
- все ок. Что это за глюки такие ? Мне нужно редактировать XML без сохранения в файл, т.к. я хочу оставить пользователю право на ошибку, чтобы ноды можно было добавлять/удалять без сохранения изминений, пока он сам не нажмет на кнопку Save
Странный глюк.
Я честно говоря никогда с таким не сталкивался - но может быть это связано со способом удаления - как правило не использую конструкцию Node->GetChildNodes()->Remove(temp); а нахожу конкретный нод, проверяю на наличие дочерних и только при отсутствии удаляю
Я честно говоря никогда с таким не сталкивался - но может быть это связано со способом удаления - как правило не использую конструкцию Node->GetChildNodes()->Remove(temp); а нахожу конкретный нод, проверяю на наличие дочерних и только при отсутствии удаляю
Так я специально удаляю непустые ноды, чтобы не заморачиваться со своим циклом прохода по дереву нод. Дочерние ноды автоматом удаляются. Если после удаления файл сохранить, загрузить снова и попаться прочесть, то все ок. Но если читать после удаления, то такой вот косяк вылазит.