Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > проблема с DOMDocument


Автор: Homer 26.3.2006, 18:04
Вот код:
Код

BSTR str=file.GetFileName().AllocSysString();
VARIANT_BOOL bSuccess = false;
HRESULT hr = exDoc.CoCreateInstance(__uuidof(DOMDocument)); tst(hr);
hr = exDoc->load(CComVariant(str), &bSuccess);    tst(hr);


Здесь в принципе ошибок не возникает, но далее:
Код

CComPtr<IXMLDOMNode> exNode;
hr=exDoc->selectSingleNode(L"/*",&exNode); tst(hr);


в лучшем случае функция возвращает ошибку, в худшем прокатывает, но узел exNode не изменяется(0х00000000) и сами представляете, что потом происходит. Вобщем из exDoc вообще ничего нельзя вытянуть smile

Но! если написать:
Код

hr = exDoc->load(CComVariant(L"../Xml/ACLab.xml"), &bSuccess);    tst(hr);


то все работает. Но такой вариант меня конечно не устраивает. Я думаю, здесь какая то проблема с кодировкой строки, но уже все испробовал, ничего не получается, помогите люди добрые, может кто сталкивался.
заранее спасибо


Автор: Nuzur 27.3.2006, 09:05
Вот так точно работает, хотя я как-то не очень понял как вы так лихо то exDoc-> то exDoc. ет наверно для продвинутых спецов smile

Код

        EVAL_HR(CoInitialize(NULL));

        MSXML2::IXMLDOMDocument2Ptr pXMLDom = NULL;
        EVAL_HR(pXMLDom.CreateInstance("Msxml2.DOMDocument.4.0"));
        pXMLDom->load(m_strPath.AllocSysString());

        MSXML2::IXMLDOMNodePtr pNode = NULL, pNodeHelper = NULL;
        MSXML2::IXMLDOMElementPtr pRootElem = NULL;

        // Get root element
        EVAL_HR(pXMLDom->get_documentElement(&pRootElem));

        pNode = pRootElem->selectSingleNode(_bstr_t("UNode"));


где m_strPath путь к вашему файлу, CString как не сложно догадаться.
Ну и потом CoUninitialize(); конечно не забыть, УДАЧИ.

Автор: Homer 27.3.2006, 13:31
exDoc это - CComPtr<IXMLDOMDocument> exDoc;

Спасибо Nuzur, но ничего не изменилось, в pRootElem так же ничего не загружается, так и остается NULL.
Мне кажется, что необходимо включить в программу Unicode, почти везде в MSDN примерах он используется. Но вот не знаю как это сделать, пишу в чистом проекте, где нет строковых функций и переменных:
#define _UNICODE
#include "tchar.h"
и вылезает ошибка: msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16

И еще вопрос, нужно ли каждый раз писать CoInitialize(NULL) и CoUninitialize(), или хватит созданных визардом в CExemelApp::InitATL() и CExemelApp::ExitInstance()??

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)