msxml3: Reorganize ISAXXMLReader_parse function.
This commit is contained in:
parent
2609e45c31
commit
194bae3b60
|
@ -1039,52 +1039,72 @@ static HRESULT WINAPI isaxxmlreader_parse(
|
||||||
xmlChar *data = NULL;
|
xmlChar *data = NULL;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
FIXME("(%p) semi-stub\n", This);
|
TRACE("(%p)\n", This);
|
||||||
|
|
||||||
hr = SAXLocator_create(This, &locator);
|
hr = SAXLocator_create(This, &locator);
|
||||||
if(FAILED(hr))
|
if(FAILED(hr))
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
|
||||||
|
locator->pParserCtxt = xmlNewParserCtxt();
|
||||||
|
if(!locator->pParserCtxt)
|
||||||
|
{
|
||||||
|
ISAXLocator_Release((ISAXLocator*)&locator->lpSAXLocatorVtbl);
|
||||||
|
return E_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
locator->pParserCtxt->sax = &locator->saxreader->sax;
|
||||||
|
locator->pParserCtxt->userData = locator;
|
||||||
|
|
||||||
hr = S_OK;
|
hr = S_OK;
|
||||||
switch(V_VT(&varInput))
|
switch(V_VT(&varInput))
|
||||||
{
|
{
|
||||||
case VT_BSTR:
|
case VT_BSTR:
|
||||||
locator->pParserCtxt = xmlNewParserCtxt();
|
|
||||||
if(!locator->pParserCtxt)
|
|
||||||
{
|
|
||||||
hr = E_FAIL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
data = xmlChar_from_wchar(V_BSTR(&varInput));
|
data = xmlChar_from_wchar(V_BSTR(&varInput));
|
||||||
xmlSetupParserForBuffer(locator->pParserCtxt, data, NULL);
|
xmlSetupParserForBuffer(locator->pParserCtxt, data, NULL);
|
||||||
|
|
||||||
locator->pParserCtxt->sax = &locator->saxreader->sax;
|
|
||||||
locator->pParserCtxt->userData = locator;
|
|
||||||
|
|
||||||
if(xmlParseDocument(locator->pParserCtxt)) hr = E_FAIL;
|
|
||||||
else hr = locator->ret;
|
|
||||||
break;
|
break;
|
||||||
case VT_ARRAY|VT_UI1:
|
case VT_ARRAY|VT_UI1:
|
||||||
locator->pParserCtxt = xmlNewParserCtxt();
|
|
||||||
if(!locator->pParserCtxt)
|
|
||||||
{
|
|
||||||
hr = E_FAIL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr = SafeArrayAccessData(V_ARRAY(&varInput), (void**)&data);
|
hr = SafeArrayAccessData(V_ARRAY(&varInput), (void**)&data);
|
||||||
if(hr != S_OK) break;
|
if(hr != S_OK) break;
|
||||||
xmlSetupParserForBuffer(locator->pParserCtxt, data, NULL);
|
xmlSetupParserForBuffer(locator->pParserCtxt, data, NULL);
|
||||||
SafeArrayUnaccessData(V_ARRAY(&varInput));
|
SafeArrayUnaccessData(V_ARRAY(&varInput));
|
||||||
|
|
||||||
locator->pParserCtxt->sax = &locator->saxreader->sax;
|
|
||||||
locator->pParserCtxt->userData = locator;
|
|
||||||
|
|
||||||
if(xmlParseDocument(locator->pParserCtxt)) hr = E_FAIL;
|
|
||||||
else hr = locator->ret;
|
|
||||||
break;
|
break;
|
||||||
|
case VT_UNKNOWN:
|
||||||
|
case VT_DISPATCH: {
|
||||||
|
IPersistStream *persistStream;
|
||||||
|
IStream *stream;
|
||||||
|
IXMLDOMDocument *xmlDoc;
|
||||||
|
|
||||||
|
if(IUnknown_QueryInterface(V_UNKNOWN(&varInput),
|
||||||
|
&IID_IPersistStream, (void**)&persistStream) == S_OK)
|
||||||
|
{
|
||||||
|
IPersistStream_Release(persistStream);
|
||||||
|
hr = E_NOTIMPL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(IUnknown_QueryInterface(V_UNKNOWN(&varInput),
|
||||||
|
&IID_IStream, (void**)&stream) == S_OK)
|
||||||
|
{
|
||||||
|
IStream_Release(stream);
|
||||||
|
hr = E_NOTIMPL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(IUnknown_QueryInterface(V_UNKNOWN(&varInput),
|
||||||
|
&IID_IXMLDOMDocument, (void**)&xmlDoc) == S_OK)
|
||||||
|
{
|
||||||
|
IXMLDOMDocument_Release(xmlDoc);
|
||||||
|
hr = E_NOTIMPL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
hr = E_NOTIMPL;
|
WARN("vt %d not implemented\n", V_VT(&varInput));
|
||||||
|
hr = E_INVALIDARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(hr == S_OK)
|
||||||
|
{
|
||||||
|
if(xmlParseDocument(locator->pParserCtxt)) hr = E_FAIL;
|
||||||
|
else hr = locator->ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(locator->pParserCtxt)
|
if(locator->pParserCtxt)
|
||||||
|
|
Loading…
Reference in New Issue