我正在使用Visual C ++对MsXML6库进行练习,以摆脱对python等解释器语言的依赖,以分析大文件。 我正在按照msdn上的教程进行操作,但是当将XML文件替换为一个更大的文件(向上为300MB)时,该程序会显示错误,提示它找不到该文件,并且后续的变体为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;
}
真的很感谢您的帮助。
答案 0 :(得分:0)
在谈论XML DOM时,您应该认为这只是通过对XML文件进行全面分析而即时创建的内存数据库。通过DOM方法处理大型XML文件是一种非常糟糕的做法,因为这样会占用大量内存并降低性能。 (内容本身,索引和交叉链接等。)就性能而言,即使10 Mb的XML DOM也是值得注意的事情,而您要付出的是它的30倍!
相反,在大XML文件上,您应该使用“ SAX解析”方法,该方法甚至可以在无穷无尽的XML流上运行。您可以存储感兴趣的XML摘录,而忽略其余内容。