C ++中的XSL转换捕获带有终止标志的消息

时间:2016-10-14 10:29:26

标签: c++ xslt msxml msxml6

我基于this document创建了一个基于XSL文件从XML文件中检索信息的项目。
我试图在XSL文件中抛出一个错误:

<xsl:if test="not(PIN/Length/text() = '4')">
    <xsl:message terminate="yes">PIN length in input suppose to be 4</xsl:message>
</xsl:if>

但它似乎不起作用(工作期间没有错误) - 就像它成功完成一样 我可以以某种方式在C ++中捕获此消息吗?

void ManageXML::XML2Generic(string sOrgFilePath, string sOrgXSLFilePath, string sCpfPath)
{
    wstring sTempFilePath = s2ws(sOrgFilePath);
    LPCWSTR sFilePath = sTempFilePath.c_str();

    wstring sTempXSLFilePath = s2ws(sOrgXSLFilePath);
    LPCWSTR sXSLFilePath = sTempXSLFilePath.c_str();

    HRESULT hr = S_OK;
    IXMLDOMDocument *pXMLDom = nullptr;
    IXMLDOMDocument *pXSLDoc = nullptr;

    CHK_HR(CreateAndInitParserDOM(&pXMLDom));
    CHK_HR(LoadXMLFile(pXMLDom, sFilePath, sOrgFilePath)); //cast to LPCWSTR
    CHK_HR(CreateAndInitParserDOM(&pXSLDoc));
    CHK_HR(LoadXMLFile(pXSLDoc, sXSLFilePath, sOrgXSLFilePath)); //cast to LPCWSTR

    // Transform dom to a string:
    CHK_HR(TransformDOM2Data(pXMLDom, pXSLDoc, sGenericResult));

CleanUp:
    SAFE_RELEASE(pXSLDoc);
    SAFE_RELEASE(pXMLDom);
    this->CreateGenericFile(sCpfPath);
    CoUninitialize();
}

我想到的一个糟糕的解决方案是让XSL像这样:

<xsl:if test="not(PIN/Length/text() = '4')">
    <xsl:text>MSXML_ERROR: PIN length in input suppose to be 4</xsl:message>
</xsl:if>

并且

CleanUp:
    SAFE_RELEASE(pXSLDoc);
    SAFE_RELEASE(pXMLDom);
    if (sGenericResult.find("MSXML_ERROR") != string::npos)
        throw runtime_error("blah blah blah");
    this->CreateGenericFile(sCpfPath);
    CoUninitialize();

0 个答案:

没有答案