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();
}

私の頭に浮かぶ悪い解決策の 1 つは、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