Собственно нужно распарсить XML-файл с помощью MSXML. Файл обычный такой. А вот распарсить не получается.
Может знатоки скажут, что не так?
Вот основной кусочек кода.
- Код: Выделить всё
MSXML2::IXMLDOMDocument2Ptr xmlDoc (__uuidof(MSXML2::DOMDocument));
xmlDoc->load("Config.xml");
xmlDoc->setProperty("SelectionLanguage", "XPath");
MSXML2::IXMLDOMNodeListPtr xmlNodeList =xmlDoc->getElementsByTagName((_bstr_t)TEXT("List"));
MSXML2::IXMLDOMNodeListPtr xmlNodeList_Aux =NULL;
MSXML2::IXMLDOMNodePtr xmlNode =NULL;
MSXML2::IXMLDOMNodePtr xmlNode_Aux =NULL;
if(xmlNodeList){
for (int i=0;i<xmlNodeList->Getlength();i++){
xmlNode=xmlNodeList->Getitem(i);
xmlNodeList_Aux = xmlNode->GetchildNodes();
for (int j=0;j<xmlNodeList_Aux->Getlength();j++){
xmlNode_Aux =xmlNodeList_Aux->Getitem(j);
if ((LPTSTR)xmlNode_Aux->nodeName==TEXT("ColumnItem")){
lv_Column.mask = LVCF_TEXT;
lv_Column.fmt = LVCFMT_LEFT;
lv_Column.pszText= (LPTSTR)xmlNode_Aux->Getattributes()->getNamedItem((_bstr_t)"Value")->nodeName;
iAcc=(int)xmlNode_Aux->Getattributes()->getNamedItem((_bstr_t)"Index");
SendMessage(hLW_Test,LVM_INSERTCOLUMN,iAcc,(LPARAM)&lv_Column);
};
};
};
};
Что не так, понять не могу. Самое интересное что я постоянно меняю код, эксперементирую, изучая объектную модель. Пять минут назад работал. Что изменил понять не могу. Вроде все так и оставил. Проблему выявить тоже не могу. Ошибку не вижу - т.е. исключение не генерируется. я выяснил что xmlNodeList таки создается, но вот как доходит до for, сразу переходит в секцию catch, но по _com_error нифига нет. В общем чушь какая-то.
Закомментив половину, я выяснил что xmlNodeList таки создается. Попробовал что-нибудь написать в MessageBox, но уже здесь генерировалось "неправильный указатель". Почему и где - это уже вопрос. Например через Getlength() я не могу и никогда не мог засунуть результат в какую-то переменную. А вот в цикле почему-то задавалась верхняя граница (правда я тогда не отлаживал).
НУ в общем как-то так стоит проблема. Подскажите кто чем может
Собственно я пробовал менять getElementsByTagName на selectNodes - они оба возвращают коллекции Node-ов. Но тогда вообще не работал. С getElementsByTagName хоть получалось.
И еще. Я сначала писал проект под VS 2005 - но он неправильно генерировал COM-обертки при #import, особенно для Excel, поэтому проект вообще не запускался. Пришлось немного поменять на VS 98, вроде Exce, ADO, MSXML заработали наконец. Так вот я думаю, может и здесь косяк в генерации оберток? Например