c++ - 从 IXMLDOMDocument::transformNode 函数获取运行时错误信息

标签 c++ error-handling xslt ixmldomdocument

我正在使用 IXMLDOMDocument::transformNode使用看起来有点像这样的 C++ 代码应用 XSLT 转换:

CComPtr<IXMLDOMDocument2> spXMLDoc;
// load spXMLDoc

CComPtr<IXMLDOMDocument2> spXSLDoc;
// load spXSLDoc

BSTR *pResult;
HRESULT hr = spXMLDoc->transformNode( spXSLDoc, pResult );
if (FAILED(hr))
{
    // Handle me
}

此代码有效,但是如果转换失败,那么我不知道如何获取有关它失败的位置或原因的任何信息 - 目前它正在失败(在具有多个包含的复杂 XSLT 上) 的 HRESULT 为 E_FAIL - 有什么方法可以让我了解更多有关其失败原因的详细信息?

我已经尝试使用 parseError 属性来获取更多错误详细信息:

IXMLDOMParseError *parseError = NULL;
hr = spXMLDoc->get_parseError(&parseError);
if ( !FAILED( hr ) )
{
    long errorCode = 0;
    hr = parseError->get_errorCode(&errorCode);
    // etc...

get_parseError 的调用成功,但是对 get_errorCode 的调用失败并返回 HRESULT S_FALSE,表明没有解析错误。 This page告诉我有两种类型的错误——解析错误和运行时错误。它展示了如何处理这两者,但似乎是面向 JavaScript 的——在我的例子中,没有抛出 C++ 运行时错误。

最佳答案

抱歉,我不确定是否来自 C++。您可以尝试快速命令行转换来帮助查找 XSLT 中的错误。 XSL 将加载但无法转换的位置存在许多错误。例如,在 XSL 文件中的某处弹出 an 以触发此类错误。

这是一个示例命令行转换工具。写入 transform.js 并从命令行运行 cscript.exe transform.js

var strDOMObject = "MSXML2.FreeThreadedDOMDocument";
var strHTTPObject = "MSXML2.XMLHTTP";
var strTemplateObject = "MSXML2.XSLTemplate";

function transform( xml, xsl ) {
    var xslt = new ActiveXObject( strTemplateObject );
    var xmlReturn = new ActiveXObject( strDOMObject );
    var xslProc;
    try {
        xslt.stylesheet = xsl;
    } catch( e ) {
        throw e;
    }

    xslProc = xslt.createProcessor();
    xslProc.input = xml;
    xslProc.transform();
    return xslProc.output;
}


try {
    var xml = new ActiveXObject( strDOMObject );
    xml.load( "id.xml" );
    var xsl = new ActiveXObject( strDOMObject );
    xsl.load( "id.xsl" );
    WScript.Echo( transform( xml, xsl ) );

} catch( err ) {
    WScript.Echo (err.description );
}

希望这对您有所帮助,并且您可以找到 C++ 答案。

关于c++ - 从 IXMLDOMDocument::transformNode 函数获取运行时错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7124363/

相关文章:

c++ - 在这个例子中,std::variant 是如何变成 valueless_by_exception 的?

java - 在 @RestControllerAdvise 上获取请求正文

image-processing - Photoshop/InDesign CS5 脚本 : image size conversion error is using too much memory?

c++ - 3D 头部的透视投影和 Z 缓冲以形成面部图像

c++ - 通过唯一标识符描述数字列表

java - 修复XPath表达式中的绝对路径,以便它们可在另一个文档的上下文中使用

xslt - 如何在 XSLT 中实现回车

xml - 使用 XSLT 创建基于双重条件的元素

c++ - 对自己的库函数的 undefined reference

mysql - 我不明白为什么我在 MySQL 上收到错误 #1452