(5 ~ MB)에 의해 절단되고있다 : 나는 것을 찾는거야큰 XML 파일은 MSXML4/FreeThreadedDOMDocument40 (COM 문자열 상호 운용성 문제)
int _tmain(int argc, _TCHAR* argv[])
{
::CoInitialize(NULL);
HRESULT hr;
CComPtr<IXMLDOMDocument> spXmlDocument;
hr = spXmlDocument.CoCreateInstance(__uuidof(FreeThreadedDOMDocument60)), __uuidof(FreeThreadedDOMDocument60);
if(FAILED(hr)) return FALSE;
spXmlDocument->put_preserveWhiteSpace(VARIANT_TRUE);
spXmlDocument->put_async(VARIANT_FALSE);
spXmlDocument->put_validateOnParse(VARIANT_FALSE);
VARIANT_BOOL bLoadSucceeded = VARIANT_FALSE;
hr = spXmlDocument->load(CComVariant(L"C:\\XMLFile1.xml"), &bLoadSucceeded);
if(FAILED(hr) || bLoadSucceeded==VARIANT_FALSE) return FALSE;
CComVariant bstrDoc;
hr = spXmlDocument->get_nodeValue(&bstrDoc);
CComPtr<IXMLDOMNode> spNode;
hr = spXmlDocument->selectSingleNode(CComBSTR(L"//SpecialNode"), &spNode);
}
bstrDoc의 내용이 잘립니다 (예외/실패한 HResults는 없습니다)
이유는 무엇입니까? 당신은 단지 <xml></xml>
요소 (5 ~ 메가 바이트를해야한다)의 큰 XML 파일을 만들어이 자신을 시도 할 수 있습니다
UPDATE : 업데이트는 MSXML 6도 false로 비동기를 설정하고 get_nodeValue를 사용하여, 차이를하지 사용하는/get_text는 아무런 차이가 없었습니다. (샘플 업데이트 됨)
문서의 끝에 배치 된 노드에 대해 selectSingleNode를 사용하면 정상적으로 작동했음을 알았습니다. 문서가 성공적으로로드되고 대신 텍스트를 가져 오는 것으로 나타났습니다. 단일 노드의 경우. 나는 아직이 문제가 인터넷에있는 다른 누구를 찾을 수 없기 때문에 당황 스럽다.
업데이트 2 :이 문제는 COM interop 자체와 관련이있는 것 같습니다. 동일한 작업을 수행하고 COM 개체로 노출시킨 간단한 C# 클래스를 만들었습니다. 나는 XML이 C# 응용 프로그램에서 훌륭하지만, C++ 응용 프로그램의 디버거에서 보면 MSXML을 사용할 때와 똑같이 보입니다.