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>