Удаление узла Xml используя Xpathnavigator

  • Автор темы tirgra
  • Дата начала
T

tirgra

Добрый день. Помогите пожалуйста разобраться в ситуации. Не могу получить доступ к атрибуту узла используя nvg.GetAttribute.
Необходимо удалить узел XML с дочерними узлами, атрибут которого отвечает условию.
При отладке видно, что у x свойство HasAttribute = true

doc = iXML.createXML();
doc.Load("db.xml");

XPathNavigator nvg = doc.CreateNavigator();
nvg.MoveToChild("NewDataSet","root");
nvg.MoveToChild("user","root");

while (true)
{
string x = nvg.GetAttribute("is_done","root");
if(x=="1")
{nvg.DeleteSelf();
doc.Save("db.xml");
break;
}
else
nvg.MoveToNext();
}


XML файл:

<?xml version="1.0" encoding="windows-1251"?>
<NewDataSet xmlns="root">
<user is_done="1" who="ivanov">
<messsage>расскать племяннику сказку!</messsage>
<repeat>15</repeat>
<datetime>14 декабря 2010 г.10:2</datetime>
</user>
<user is_done="1" who="ivanov">
<messsage>ekjnwdfkjwendkjwenkjwrgwerg</messsage>
<repeat>15</repeat>
<datetime>14 декабря 2010 г.13:43</datetime>
</user>
</NewDataSet>

Спасибо.
 
E

ensane

tirgra, дай весь код, а еще лучше - весь проект запакуй и кинь на ensane.brest@gmail.com
что у x свойство HasAttribute = true
??? x - строка или я что-то не понял?
При дебаге какие значения принимает x?
В данной записи, насколько я понимаю, будет удален только первый узел, а дальше дело не пойдет...
 
T

tirgra

При дебаге x возвращает пустую строку.

12345.JPG

Как видно из принтскрина - это результат работы функции GetAttribute, при котором атрибут не найде или не соответствует условию. но у меня то все должно срабатывать.

123456.JPG

Результатом не удаляется ни один узел, хотя оба отвечают условию ;)
 
H

hosm

string x = nvg.GetAttribute("is_done","root");
может, тут убрать namespace "root", просто ""?

Добавлено: Атрибуты не наследуют namespace, в отличие от узлов, если что, надо прописывать явно в xml
According to the spec - child nodes inherit default namespace (i.e. the one defined in xmlns) from the parent but attributes do not. If you need an attribute to be in a specific namespace you have to define namespace prefix for this attribute
 
T

tirgra

может, тут убрать namespace "root", просто ""?

Заработало, спасибо.

Добавлено: Атрибуты не наследуют namespace, в отличие от узлов, если что, надо прописывать явно в xml

И спасибо за пояснение; важно запомнить ;)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!