Allows you to pass variables into a style sheet that will be referenced by <xsl:param> within the style sheet.
objXSLProcessor.addParameter(baseName, parameter, namespaceURI)
HRESULT addParameter (BSTR baseName, VARIANT parameter, BSTR namespaceURI);
E_FAIL if readyState is READYSTATE_INTERACTIVE.
The addParameter method can be called in on TransformNode handlers and between transform calls (in async processing), and further processing will use the updated parameter.
BOOL XSLProcessorAddParameterDemo () { BOOL bResult = FALSE; short sResult = FALSE; HRESULT hr; IXMLDOMDocument2 *pStyleSheet=NULL; IXSLTemplate *pIXSLTemplate=NULL; IXSLProcessor *pIXSLProcessor=NULL; VARIANT varValue; try { hr = CoCreateInstance(CLSID_XSLTemplate, NULL, CLSCTX_SERVER, IID_IXSLTemplate, (LPVOID*)(&pIXSLTemplate)); SUCCEEDED(hr) ? 0 : throw hr; if(pIXSLTemplate) { hr=CoCreateInstance(CLSID_FreeThreadedDOMDocument, NULL, CLSCTX_SERVER, IID_IXMLDOMDocument2, (LPVOID*)(&pStyleSheet)); SUCCEEDED(hr) ? 0 : throw hr; if(pStyleSheet) { hr=pStyleSheet->put_async(VARIANT_FALSE); if(SUCCEEDED(hr)) { hr=pStyleSheet->load(_variant_t (_T("d:\\inetpub\\wwwroot\\samplexsl.xml")), &sResult); if(SUCCEEDED(hr) && (sResult==VARIANT_TRUE)) { hr=pIXSLTemplate->putref_stylesheet(pStyleSheet); if(SUCCEEDED(hr)) { hr=pIXSLTemplate->createProcessor(&pIXSLProcessor); SUCCEEDED(hr) ? 0 : throw hr; if(pIXSLProcessor) { hr=CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_SERVER, IID_IXMLDOMDocument2, (LPVOID*)(&pIXMLDOMDocument)); SUCCEEDED(hr) ? 0 : throw hr; if(pIXMLDOMDocument) { hr=pIXMLDOMDocument->put_async(VARIANT_FALSE); if(SUCCEEDED(hr)) { hr=pIXMLDOMDocument->load(_variant_t( _T("d:\\inetpub\\wwwroot\\sampleXSLWithParam.xml")), &sResult); if(SUCCEEDED(hr) && (sResult==VARIANT_TRUE)) { hr=pIXSLProcessor->put_input(_variant_t (pIXMLDOMDocument)); if(SUCCEEDED(hr)) { hr=pIXSLProcessor->addParameter( _T("fooText"), _variant_t(_T("Add Parameter Test")), _T("")); if(SUCCEEDED(hr)) bResult=TRUE; hr=pIXSLProcessor->transform( &sResult); if(SUCCEEDED(hr)&& (sResult == VARIANT_TRUE)) { pIXSLProcessor->get_output( &varValue); ::MessageBox(NULL, _bstr_t(varValue), _T("Transformed Output"), MB_OK); } } } } RELEASE(pIXMLDOMDocument); } } } } } RELEASE(pStyleSheet); } RELEASE(pIXSLTemplate); } } catch(...) { CHECK_AND_RELEASE(pIXSLTemplate); CHECK_AND_RELEASE(pStyleSheet); CHECK_AND_RELEASE(pIXMLDOMDocument); DisplayErrorToUser(); } return bResult; }
The stylesheet – "d:\\inetpub\\wwwroot\\sampleXSLWithParam.xml"
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0" xmlns:myObj="urn:my-object">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="fooText"/>
<xsl:template match="/">
<xsl:element name="bar">
<xsl:value-of select="$fooText"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Output (in a message box)
<?xml version=”1.0” encoding=”UTF-16”?> <bar> Add Parameter Test </bar>