0

我基于此文档制作了一个项目,以基于 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();
4

0 回答 0