xml и TreeView
От: tesuji  
Дата: 25.02.06 16:41
Оценка:
Уважаемые, подскажите как синхронизировать содержимое xml и TreeView.
Как загрузить дерево из xml — понятно. Как сохранить дерево обратно тоже ясно. А как получить возможность во время работы програмы дергать данные из нужной ноды xml-файла, встав на ассоциированую ноду в дереве. Пока получается только элементарный перебор xml-файла. Те.е. встав на ноду в дереве получаем ее ID, идем в xml начинаем обходить все ноды, пока не наткнемся на подходящую с нужным ID, вот тогда-то и считываем из нее данные.
Видимо есть правильное решение, ибо структура и дерева и файла идентичны. Если у кого есть реализация на Delphi- подбростьте. Или хотя бы идею.
Re: xml и TreeView
От: Jax Россия  
Дата: 25.02.06 23:10
Оценка:
Здравствуйте, tesuji, Вы писали:

T>Уважаемые, подскажите как синхронизировать содержимое xml и TreeView.

T>Как загрузить дерево из xml — понятно. Как сохранить дерево обратно тоже ясно. А как получить возможность во время работы програмы дергать данные из нужной ноды xml-файла, встав на ассоциированую ноду в дереве. Пока получается только элементарный перебор xml-файла. Те.е. встав на ноду в дереве получаем ее ID, идем в xml начинаем обходить все ноды, пока не наткнемся на подходящую с нужным ID, вот тогда-то и считываем из нее данные.
T>Видимо есть правильное решение, ибо структура и дерева и файла идентичны. Если у кого есть реализация на Delphi- подбростьте. Или хотя бы идею.

Использовать XPath выражения. Как в Дельфи не знаю, может есть какая функция типа SelectNode()...
Re: xml и TreeView
От: bugmonster Россия  
Дата: 26.02.06 11:57
Оценка:
Здравствуйте, tesuji, Вы писали:

T>Уважаемые, подскажите как синхронизировать содержимое xml и TreeView.

T>Как загрузить дерево из xml — понятно. Как сохранить дерево обратно тоже ясно. А как получить возможность во время работы програмы дергать данные из нужной ноды xml-файла, встав на ассоциированую ноду в дереве. Пока получается только элементарный перебор xml-файла. Те.е. встав на ноду в дереве получаем ее ID, идем в xml начинаем обходить все ноды, пока не наткнемся на подходящую с нужным ID, вот тогда-то и считываем из нее данные.
T>Видимо есть правильное решение, ибо структура и дерева и файла идентичны. Если у кого есть реализация на Delphi- подбростьте. Или хотя бы идею.

Если нужно по указанному ноду дерева получить соостветствующий ему нод из xml, то при создании элемента тривьюва в lParam TVITEMа заноси указатель на соответствующий ему IXMLDOMElement. Потом его можно легко оттуда забрать. С Delphi не помогу, т.к. сам делал это на WTL в С++
Re[2]: xml и TreeView
От: Аноним  
Дата: 26.02.06 14:00
Оценка:
Здравствуйте, bugmonster, Вы писали:

B>Если нужно по указанному ноду дерева получить соостветствующий ему нод из xml, то при создании элемента тривьюва B>в lParam TVITEMа заноси указатель на соответствующий ему IXMLDOMElement. Потом его можно легко оттуда забрать.


Забрать указатель можно, но как потом при его помощи спозицонироваться на IXMLDOMElement? Кроме перебора таки ничего в голову не приходит
Re[3]: xml и TreeView
От: bugmonster Россия  
Дата: 26.02.06 14:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Забрать указатель можно, но как потом при его помощи спозицонироваться на IXMLDOMElement? Кроме перебора таки ничего в голову не приходит


Что значит "спозицонироваться"? Как получить доступ к IXMLDOMElement по указателю на него?
Например:

    LRESULT OnEndLabelEdit(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/)
    {
        LPNMTVDISPINFO pInfo = LPNMTVDISPINFO(pnmh);
        if(pInfo->item.pszText)
        {
            SetItemText(pInfo->item.hItem,pInfo->item.pszText);
            _variant_t vtName(pInfo->item.pszText);
            ((IXMLDOMElement*)pInfo->item.lParam)->setAttribute(L"name",vtName);
            SortChildren(GetParentItem(pInfo->item.hItem));
        }
        return 0;
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.