问题简述为:不同的.xsql可以通过javascript的document.query.repository.value传值,那么不同的.xsl(或者同一个.xsl的两次调用)之间怎样传值?如果是jsp,可以用session多级页面传值,那么xml呢?脑袋都大了……

解决方案 »

  1.   

    addParameter Method  [Script]
    Adds parameters into an XSL Transformations (XSLT) style sheet.[Script] 
    Script Syntax
    objXSLProcessor.addParameter(baseName, parameter, namespaceURI);
    Parameters
    baseName 
    The name that will be used inside the style sheet to identify the parameter context. 
    parameter 
    A number, Boolean, string, IXMLDOMNodeList, or IXMLDOMNode. Passing in a single node will produce a node list that contains one node (shortcut). 
    namespaceURI (optional) 
    An optional namespace. 
    Example
    var xslt = new ActiveXObject("Msxml2.XSLTemplate");
    var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
    var xslProc;
    xslDoc.async = false;
    xslDoc.load("sample.xsl");
    xslt.stylesheet = xslDoc;
    var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
    xmlDoc.async = false;
    xmlDoc.load("books.xml");
    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>
    [Visual Basic] 
    Visual Basic Syntax
    objXSLProcessor.addParameter(baseName, parameter, namespaceURI)
    Parameters
    baseName 
    The name that will be used inside the style sheet to identify the parameter context. 
    parameter 
    A number, Boolean, string, IXMLDOMNodeList, or IXMLDOMNode. Passing in a single node will produce a node list that contains one node (shortcut). 
    namespaceURI (optional) 
    An optional namespace. 
    Example
    Dim xslt As New Msxml2.XSLTemplate
    Dim xslDoc As New Msxml2.FreeThreadedDOMDocument
    Dim xmlDoc As New Msxml2.DOMDocument
    Dim xslProc As IXSLProcessor
    xslDoc.async = False
    xslDoc.Load "sample.xsl"
    Set xslt.stylesheet = xslDoc
    xmlDoc.async = False
    xmlDoc.Load "books.xml"
    Set xslProc = xslt.createProcessor()
    xslProc.input = xmlDoc
    xslProc.addParameter "param1", "Hello"
    xslProc.Transform
    MsgBox 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>
    [C/C++] 
    C/C++ Syntax
    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). 
    namespaceURI [in, optional] 
    An optional namespace. 
    C/C++ Return Values
    E_FAIL if readyState is READYSTATE_INTERACTIVE.Example
    #import "msxml3.dll"
    using namespace MSXML2;#define CHECK_AND_RELEASE(pInterface)  \
    if(pInterface) \
       {\
    pInterface->Release();\
    pInterface = NULL;\
       }\#define RELEASE(pInterface)  \
       {\
    pInterface->Release();\
    pInterface = NULL;\
       }\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;
    }
    Style Sheet: "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>
    Res
    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.