addParameter Method

 

Adds parameters into an XSL Transformations (XSLT) style sheet.

objXSLProcessor.addParameter(baseName, parameter, namespaceURI);  

Parameters

baseName
The name that will be used inside the style sheet to identify the parameter context.

parameter
In most cases, a number, Boolean, string, IXMLDOMNodeList, or IXMLDOMNode. Passing in a single node will produce a node list that contains one node (shortcut). For MSXML 6.0, to remove a parameter previously added to the processor, provide a value of Empty or Null instead. This acts as a signal to the processor to remove any previously added parameter of the same name. However for MSXML3.0, this function cannot remove previously added parameters.

namespaceURI (optional)
An optional namespace.

var xslt = new ActiveXObject("Msxml2.XSLTemplate.6.0");  
var xsldoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.6.0");  
var xslproc;  
xsldoc.async = false;  
xsldoc.load("sample.xsl");  
if (xsldoc.parseError.errorCode != 0) {  
   var myErr = xsldoc.parseError;  
   WScript.Echo("You have error " + myErr.reason);  
} else {  
   xslt.stylesheet = xsldoc;  
   var xmldoc = new ActiveXObject("Msxml2.DOMDocument.6.0");  
   xmldoc.async = false;  
   xmldoc.load("books.xml");  
   if (xmldoc.parseError.errorCode != 0) {  
      var myErr = xmldoc.parseError;  
      WScript.Echo("You have error " + myErr.reason);  
   } else {  
      xslproc = xslt.createProcessor();  
      xslproc.input = xmldoc;  
      xslproc.addParameter("param1", "Hello");  
      xslproc.transform();  
      WScript.Echo(xslproc.output);  
   }  
}  

HRESULT addParameter (BSTR baseName, VARIANT parameter, BSTR   
namespaceURI);  

Parameters

baseName[in]
The name that will be used inside the style sheet to identify the parameter context.

parameter[in]
A number, Boolean, string, node list, or node. Passing in a single node will produce a node list that contains one node (shortcut). For MSXML 6.0, to remove a parameter previously added to the processor, you can pass a value of VT_EMPTY, VT_NULL, or a NULL IDispatch or IUnknown instead. This acts as a signal to the processor to remove any previously added parameter of the same name. However for MSXML3.0, this function cannot remove previously added parametera.

namespaceURI[in, optional]
An optional namespace.

Return Values

E_FAIL if readyState is READYSTATE_INTERACTIVE.

Example

#include "stdio.h"
#include "msxml6.h"

int checkParseError(IXMLDOMParseErrorPtr pError);
void dump_com_error(_com_error &e);


int main(int argc, char* argv[])
{
    
    CoInitialize(NULL);
    HRESULT hr;
    
    try{
        
        BOOL bResult = FALSE;
        short sResult = FALSE;
        
        
        IXMLDOMDocument2Ptr pStyleSheet=NULL;
        IXSLTemplatePtr pIXSLTemplate=NULL;
        IXSLProcessorPtr pXSLProcessor=NULL;    
        
        hr = pIXSLTemplate.CreateInstance(__uuidof(XSLTemplate60));
        
        hr=pStyleSheet.CreateInstance(__uuidof(FreeThreadedDOMDocument60));
        pStyleSheet->async = VARIANT_FALSE;
        hr=pStyleSheet->load("sample.xsl");
        //check on the parser error        
        if(hr!=VARIANT_TRUE)
        {
            return checkParseError(pStyleSheet->parseError);
        }

        pIXSLTemplate->stylesheet = pStyleSheet.GetInterfacePtr();
        pXSLProcessor =  pIXSLTemplate->createProcessor();
        
        IXMLDOMDocumentPtr    pInputDoc;
        
        hr = pInputDoc.CreateInstance(__uuidof(DOMDocument60));
        pInputDoc->async = VARIANT_FALSE;
        hr = pInputDoc->load("books.xml");
        //check on the parser error        
        if(hr!=VARIANT_TRUE)
        {
            return checkParseError(pInputDoc->parseError);
        }        
        
        pInputDoc->async = VARIANT_FALSE;
        pXSLProcessor->input = pInputDoc.GetInterfacePtr();        
        
        hr=pXSLProcessor->addParameter("param1", "Hello", "");
        
        VARIANT_BOOL vtRet = pXSLProcessor->transform();
        if(vtRet != VARIANT_TRUE)
        {
            MessageBox(NULL, "transformation failed","Error", MB_OK);
            return -1;
        }
        _bstr_t bstrOutput  = pXSLProcessor->Getoutput();
        
        
        MessageBox(NULL, bstrOutput,"Transformed Output", MB_OK);
        
    }
    catch(_com_error &e)
    {
        dump_com_error(e);
    }
    return 0;
}


int checkParseError(IXMLDOMParseErrorPtr pError)
{
    _bstr_t parseError =_bstr_t("At line ")+ _bstr_t(pError->Getline()) + _bstr_t("\n")+ _bstr_t(pError->Getreason());
    MessageBox(NULL,parseError, "Parse Error",MB_OK);
    return -1;
    
}

void dump_com_error(_com_error &e)
{
    printf("Error\n");
    printf("\a\tCode = %08lx\n", e.Error());
    printf("\a\tCode meaning = %s", e.ErrorMessage());
    _bstr_t bstrSource(e.Source());
    _bstr_t bstrDescription(e.Description());
    printf("\a\tSource = %s\n", (LPCSTR) bstrSource);
    printf("\a\tDescription = %s\n", (LPCSTR) bstrDescription);
}

The examples in this topic use the following file.

Sample.xsl

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:output method="html"/>
   <xsl:param name="param1"/>
   <xsl:template match="/">
      The parameter value was: <xsl:value-of select="$param1"/>
   </xsl:template>
</xsl:stylesheet>

The examples in this topic output the following:

The parameter value was: Hello

The addParameter method can be called on transformNode handlers and between transform calls (in asynchronous processing), and further processing will use the updated parameter. Added parameters are referenced by <xsl:param> within the style sheet.

Implemented in: MSXML 3.0 and MSXML 6.0

IXSLProcessor

Show: