gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:20:46 27 4
gpt4 key购买 nike

我正在使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com