我正在尝试调试代码中似乎是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;
}注意: m_pXmlDoc是CComPtr<IXMLDOMDocument>类型的。
似乎对IXMLDOMDocument::load()的调用(标记为*)失败了- IOW,它正在返回S_FALSE。
我无法进入load()来确定其失败的原因,因为它是一个COM调用。
这个方法的MSDN页面似乎没有给出太多的洞察力。
我有几个预感:
对于这个电话为什么会失败有什么想法吗?
发布于 2010-01-27 11:09:29
下面的代码将从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);
}sReason将被错误消息填充。sSource将在XML中包含错误的源行。nLine和nColumn应该设置为错误的行号和列,尽管在实践中这两个错误并不总是可靠地设置(iirc,对于验证错误尤其如此,而不是解析器/格式良好的错误)。
发布于 2010-09-24 16:43:16
如果XML文件是由另一个Task或Proccess打开的,那么Load()方法将无法加载该文件,但它并不表示加载失败。我认为这种行为是一种错误。
因此,您必须检查属性documentElement -如果属性为null,load()也失败了。
https://stackoverflow.com/questions/2144219
复制相似问题