Как добавить / вставить xsl: param в таблицу стилей xsl перед преобразованием? - PullRequest
1 голос
/ 30 марта 2011

Учитывая следующий код (и не используя jQuery), что было бы хорошим способом динамически вставить тег в xsl перед преобразованием?Я хотел бы, чтобы кто-то "исправил" функцию addParam

function addParam(xsl,name,value) {

/** input:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">    
  <xsl:template match="/">.....

output:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">    
  <xsl:param name="parm1" value="parameter number 1" />      
  <xsl:template match="/">.....
*/

   var parameter = document.createElement("xsl:param");
   parameter.setAttribute("name",name);
   parameter.setAttribute("value",value);
   xsl.documentElement.insertBefore(parameter,xsl.documentElement.firstsChild)

}

function displayResult(pXml) {  
    var xsl = loadXMLDoc("cdcatalog.xsl");
    // code for IE
    if (window.ActiveXObject) {

    /* I want to call it here >>> */ 
        addParam(xsl,"parm1","parameter value1");

        var ex = pXml.transformNode(xsl);
        document.getElementById("availableSearchItems").innerHTML = ex;
    }
    // code for Mozilla, Firefox, Opera, Chrome, etc.
    else if (document.implementation && document.implementation.createDocument) {
        xsltProcessor = new XSLTProcessor();
        xsltProcessor.importStylesheet(xsl);

    /* I want to call it here */ 
        addParam(xsl,"parm1","parameter value1");

        resultDocument = xsltProcessor.transformToFragment(pXml, document);
        document.getElementById('availableSearchItems').innerHTML = "";
        document.getElementById("availableSearchItems").appendChild(resultDocument);
    }
}

Я прочитал как передать параметр из URL в таблицу стилей XSL с помощью jQuery? и понять, что Firefox может выполнять setParameter.и IE может сделать

var strParam = "//xsl:param[@name='" + p + "']";
var xslParam = xObj.selectSingleNode(strParam);                     
xslParam.setAttribute("select",op[p]);

, но это при условии, что xsl уже имеет параметр.

Указатели и исправления очень приветствуются.Спасибо

1 Ответ

1 голос
/ 15 июня 2012

Почему вы хотите изменить имя параметра в xsl? Конечно, это может быть статичным, и вы меняете значение этого параметра? Затем вы можете установить то, что вы хотите передать в xsl в JavaScript, и сделать это так и просто.

<xsl:param name="parm1"/>

Тогда это получает значение, когда вы вызываете функции добавления и установки параметров, как показано ниже. Вы даже можете проверить, чтобы убедиться, что он не равен нулю, прежде чем проходить через него.

//code for ie
if (window.ActiveXObject)
{   
    var xslt = new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
    xslt.async = false;
    xslt.load(xsl);
    var template = new ActiveXObject("MSXML2.XSLTemplate");
    template.stylesheet = xslt;
    var process = template.createProcessor();
    process.input = xml;
    if(yourparam != ""){
        process.addParameter("paramID", yourparam);
    }
    process.transform();
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
    var xml_serializer = new XMLSerializer();
    xsltProcessor=new XSLTProcessor();
    xsltProcessor.importStylesheet(xsl);
    if(yourparam != ""){
        xsltProcessor.setParameter(null, "paramID", yourparam);   
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...