我正在尝试调试我的代码中似乎是XML解析问题.我已将其分离到以下代码段:
HRESULT
CXmlDocument::Load(IStream* Stream)
{
CComVariant xmlSource(static_cast<IUnknown*>(Stream));
VARIANT_BOOL isSuccessful;
* HRESULT hr = m_pXmlDoc->load(xmlSource, &isSuccessful);
return (hr == S_FALSE) ? E_FAIL : hr;
}
Run Code Online (Sandbox Code Playgroud)
注意: m_pXmlDoc属于该类型CComPtr<IXMLDOMDocument>.
看来IXMLDOMDocument::load()(标有*)的调用失败了 - IOW,它正在返回S_FALSE.
我无法介入load()以确定它失败的原因,因为它是一个COM调用.
这种方法的MSDN页面似乎没有提供很多见解.
我有几个预感:
关于为什么这个电话会失败的任何想法?
Phi*_*oth 10
以下代码将从DOM中获取特定的解析器错误,并在源XML中获取它的位置.
CComPtr<IXMLDOMParseError> pError;
CComBSTR sReason, sSource;
long nLine = 0, nColumn = 0;
m_pXmlDoc->get_parseError(&pError);
if(pError)
{
pError->get_reason(&sReason);
pError->get_srcText(&sSource);
pError->get_line(&nLine);
pError->get_linepos(&nColumn);
}
Run Code Online (Sandbox Code Playgroud)
sReason将填充错误消息.sSource将包含XML中的错误源代码行.nLine并且nColumn应该设置为错误的行号和列,尽管实际上这两个并不总是可靠地设置(iirc,尤其是验证错误,而不是解析器/格式良好的错误).