xml parsen
-
ja danke.. aber das kenne ich schon.. mein problem ist nur, dass ich immer einen laufzeitfehler bekomme..
-
oh... und den behätst Du lieber für Dich, denn sonst könnte Dir ja jmd. helfen.
-
also mein code sieht wie folgt aus:
CString pXmlFile = _T("C:\\Install.xml"); IXMLDOMDocument2* m_xmlDomDoc = NULL; HRESULT hr = CoCreateInstance(__uuidof(DOMDocument40), NULL, CLSCTX_INPROC_SERVER, __uuidof(IXMLDOMDocument2), (void**) m_xmlDomDoc); if (S_OK == hr) { hr = m_xmlDomDoc->put_async(VARIANT_FALSE); if (S_OK == hr) { VARIANT vURL; vURL.vt = VT_BSTR; V_BSTR(&vURL) = T2BSTR(pXmlFile); VARIANT_BOOL vb; hr = m_xmlDomDoc->load(vURL, &vb); } } CString strQuery; strQuery.Format(_T("//InstallList/Extent Name/File Path")); CString filePath; IXMLDOMNodeList* pXMLDOMNodeList = NULL; hr = m_xmlDomDoc->selectNodes(T2BSTR(strQuery), &pXMLDOMNodeList); if (S_OK == hr) { IXMLDOMNode* pathEI = NULL; while (S_OK == pXMLDOMNodeList->nextNode(&pathEI)) { BSTR strElementText = NULL; hr = pathEI->get_text(&strElementText); if (S_OK == hr) { filePath = (CString) strElementText; } } }
zusätzlich ist noch zu sagen, dass ich gar keine erfahrung in diesem bereich habe..
-
und was / wie nicht geht ist dann doch noch ein geheimniss?
-
bekomme in zeile 26 einen laufzeitfehler:
Unbehandelte Ausnahme bei 0x0064dc41 in Prog.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
-
Ja, dann ist vermutlich
HRESULT hr = CoCreateInstance(__uuidof(DOMDocument40), NULL, CLSCTX_INPROC_SERVER, __uuidof(IXMLDOMDocument2), (void**) m_xmlDomDoc);
das schiefgegangen.
Also: hr prüfen!
-
danke schon mal.. wie gesagt ich bin wirklich ein neuling...
in hr steht nun E_INVALIDARG
wie soll ich jetzt damit umgehen?
-
Hallo,
teste erst, ob du überhaupt einen gültigen m_xmlDomDoc-Zeiger hast!
MfG,
Probe-Nutzer
-
sorry.. wie teste ich das?
-
LeChief01 schrieb:
danke schon mal.. wie gesagt ich bin wirklich ein neuling...
in hr steht nun E_INVALIDARG
wie soll ich jetzt damit umgehen?Du musst schon sicher sein, dass das angeforderte Interface über DOMDocument40 überhaupt vorhanden ist, gerade bei MSXML muss man sehr auf die installierten Versionen achten, und kann nicht davon ausgehen, dass auf dem Zielsystem die entsprechende Version vorhanden ist. Lese dir das hier:
http://msdn.microsoft.com/en-us/library/ms757837(v=VS.85).aspx
durch, um passende Kombinationen der Argumente für CoCreateInstance anzugeben, je nach installierter MSXML-Version.
MfG,
Probe-Nutzer
-
okay.. versuche mal.. vielen dank
-
verstehe das nicht...
-
Um das gleich auszuschließen: Hast du überhaupt COM initialisiert? Vor allen Aktionen muss ein
CoInitialize(NULL);
passiert sein.
MfG,
Probe-Nutzer
-
ja habe ich.. liegt nicht an dem
-
Was ich jetzt erst sehe: dir fehlt der &-Operator bei m_xmlDomDoc:
HRESULT hr = CoCreateInstance(__uuidof(DOMDocument40), NULL, CLSCTX_INPROC_SERVER, __uuidof(IXMLDOMDocument2), (void**) &m_xmlDomDoc); // hier Adresse übergeben!!
MfG,
Probe-Nutzer
-
bingo... vielen dank probe-nutzer...