Export (0) Print
Expand All
DOM
Expand Minimize

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

Show:
© 2014 Microsoft