Я делаю упражнение с библиотекой MsXML6 с Visual C ++, чтобы избавиться от зависимости от языков интерпретатора, таких как python, для анализа больших файлов.
Я следовал учебному пособию по msdn, однако при замене XML-файла на гораздо больший (более 300 МБ) программа отображает ошибку, из-за которой не удалось найти файл, и последующим вариантом является NULL.
Руководство: https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms767609(v%3dvs.85)
HRESULT hr = S_OK;
IXMLDOMDocument *pXMLDom = NULL;
IXMLDOMNodeList *pNodes = NULL;
IXMLDOMNode *pNode = NULL;
BSTR bstrQuery1 = NULL;
BSTR bstrQuery2 = NULL;
BSTR bstrNodeName = NULL;
BSTR bstrNodeValue = NULL;
DOMNodeType DOMType;
VARIANT varNodeValue;
VARIANT_BOOL varStatus;
VARIANT varFileName;
VariantInit(&varFileName);
CHK_HR(CreateAndInitDOM(&pXMLDom));
CHK_HR(VariantFromString(L"TestDoc.xml", varFileName));
CHK_HR(pXMLDom->load(varFileName, &varStatus));
if (varStatus != VARIANT_TRUE)
{
CHK_HR(ReportParseError(pXMLDom, "Failed to load DOM from TestDoc.xml"));
initSuccessful = false;
}
else
{
//Assigns the DOM object as a member variable to be used in other methods
pXMLDomClassVar = pXMLDom;
initSuccessful = true;
}
Я был бы очень признателен за помощь.
Говоря о XML DOM, вы должны учитывать, что это просто база данных в памяти, создаваемая на лету посредством полного анализа этого XML-файла. Работа с большими XML-файлами с использованием подхода DOM — очень плохая практика, так как в этом случае потребляется много памяти и снижается производительность. (сам контент, индексы и перекрестные ссылки и т. д.) Даже 10 МБ XML DOM — это заметная вещь с точки зрения производительности, и вы в 30 раз больше!
Вместо этого в больших XML-файлах следует использовать подход «SAX-синтаксический анализ», который может работать даже в бесконечных XML-потоках. Это зависит только от вас, чтобы сохранить интересующие вас фрагменты XML и игнорировать все остальное.
Других решений пока нет …