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

Тема в разделе "MS Visual C++", создана пользователем tirgra, 14 дек 2010.

  1. tirgra

    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>

    Спасибо.
     
  2. ensane

    ensane Гость

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

    tirgra Гость

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

    12345.JPG

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

    123456.JPG

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

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    может, тут убрать namespace "root", просто ""?

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

    tirgra Гость

    И спасибо за пояснение; важно запомнить ;)
     
Загрузка...

Поделиться этой страницей