Adds parameters into an XSL Transformations (XSLT) style sheet.
objXSLProcessor.addParameter(baseName, parameter, namespaceURI);
IXMLDOMNodeList
, or IXMLDOMNode
. Passing in a single node will produce a node list that contains one node (shortcut). 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.var xslt = new ActiveXObject("Msxml2.XSLTemplate.5.0"); var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.5.0"); var xslProc; xslDoc.async = false; xslDoc.load("sample.xsl"); if (xmlDoc.parseError.errorCode <> 0) { var myErr = xmlDoc.parseError; alert("You have error " + myErr.reason); } else { xslt.stylesheet = xslDoc; var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.5.0"); xmlDoc.async = false; xmlDoc.load("books.xml"); if (xmlDoc.parseError.errorCode <> 0) { var myErr = xmlDoc.parseError; alert("You have error " + myErr.reason); } else { xslProc = xslt.createProcessor(); xslProc.input = xmlDoc; xslProc.addParameter("param1", "Hello"); xslProc.transform(); alert(xslProc.output); } }
File Name: 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>
objXSLProcessor.addParameter(baseName, parameter, namespaceURI)
IXMLDOMNodeList
, or IXMLDOMNode
. Passing in a single node will produce a node list that contains one node (shortcut). 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.Dim xslt As New Msxml2.XSLTemplate50 Dim xslDoc As New Msxml2.FreeThreadedDOMDocument50 Dim xmlDoc As New Msxml2.DOMDocument50 Dim xslProc As IXSLProcessor xslDoc.async = False xslDoc.Load "sample.xsl" If (xmlDoc.parseError.errorCode <> 0) Then Dim myErr Set myErr = xmlDoc.parseError MsgBox("You have error " & myErr.reason) Else Set xslt.stylesheet = xslDoc xmlDoc.async = False xmlDoc.Load "books.xml" If (xmlDoc.parseError.errorCode <> 0) Then Dim myErr Set myErr = xmlDoc.parseError MsgBox("You have error " & myErr.reason) Else Set xslProc = xslt.createProcessor() xslProc.input = xmlDoc xslProc.addParameter "param1", "Hello" xslProc.Transform MsgBox xslProc.output End If End If
File Name: 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>
HRESULT addParameter (BSTR baseName, VARIANT parameter, BSTR namespaceURI);
E_FAIL if readyState
is READYSTATE_INTERACTIVE.
#include "stdio.h" #import <msxml5.dll> using namespace MSXML2; 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(XSLTemplate50)); hr=pStyleSheet.CreateInstance(__uuidof(FreeThreadedDOMDocument50)); pStyleSheet->async = VARIANT_FALSE; hr=pStyleSheet->load("c:\\samplexsl.xml"); //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(DOMDocument50)); pInputDoc->async = VARIANT_FALSE; hr = pInputDoc->load("c:\\sampleXSLWithParam.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); }
Style Sheet: "d:\\inetpub\\wwwroot\\sampleXSLWithParam.xml"
<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>
Output (in a message box)
<?xml version="1.0" encoding="UTF-16"?> <bar> Add Parameter Test </bar>
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.
To view reference information for Visual Basic, C/C++, or Script only, click the Language Filter button in the upper-left corner of the page.
Applies to: IXSLProcessor