0

我有一个像这样的html页面:

<html>
<head>
<script>
function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
  {
  xhttp=new XMLHttpRequest();
  }
else
  {
  xhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xhttp.open("GET",dname,false);
xhttp.send("");
return xhttp.responseXML;
}

function displayResult()
{
xml=loadXMLDoc("1.xml");
xsl=loadXMLDoc("2.xsl");
// code for IE
if (window.ActiveXObject)
  {
  xml.addParameter("rss", test); 
  ex=xml.transformNode(xsl);
  document.getElementById("example").innerHTML=ex;
  }
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
  {
  xsltProcessor=new XSLTProcessor();
  xsltProcessor.importStylesheet(xsl);
  resultDocument = xsltProcessor.transformToFragment(xml,document);
  document.getElementById("example").appendChild(resultDocument);
  }
}
</script>
</head>
<body onload="displayResult()">
<div id="example" />
</body>
</html>

现在我想将一个变量(javascript)传递给 XSL,例如“course_name”,以便在 XSL 中我可以像这样使用它

<xsl:param name="course_name" />
<xsl:value-of select="$course_name" />

高度赞赏解决此问题的方法的任何帮助。

4

2 回答 2

3

你可以这样做:

xsltProcessor.setParameter(null, "course_name", "whatever the name is");

对于 IE,您需要根据http://msdn.microsoft.com/en-us/library/windows/desktop/ms762312%28v=vs.85%29.aspx更改代码,但命令是:

xslproc.addParameter("param1", "Hello");

...但是鉴于您添加了“xslt-2.0”作为标签,您应该知道浏览器中的内置 XSLT 支持仅支持 XSL 1.0。

以下内容可能会有所帮助:

于 2012-10-08T19:34:06.710 回答
1

Saxon-CE XSLT 2.0 处理器作为 JavaScript 库/框架在浏览器中运行。因为它的 JavaScript 存在高级别的互操作性,所以您可以将参数传递给 XSLT 处理器,但您也可以从 XSLT 调用 JavaScript 函数,这提供了额外的灵活性。

在传递值时,JavaScript 中的数组对应于 XSLT 2.0 序列,但仍需要注意确保跨语言边界保留类型。

Saxon-CE 的 JavaScript API 有 2 种不同形式的语法 - 一种与您的代码中的相同,但下面是替代语法的示例 - 相同的代码在所有主要浏览器上运行:

<!DOCTYPE html>
   <html>
      <head>
         <title>stacko</title>
         <script type="text/javascript" language="javascript"
                       src="../Saxonce/Saxonce.nocache.js"></script>
         <script type="text/javascript" language="javascript">

         var my_course = "physics";

         onSaxonLoad = function() {   
            proc = Saxon.run( {
            stylesheet:   'stacko.xsl',
            source:       'stacko.xml',
            parameters: {
                           course_name: my_course,
                           tutor:       "Mr smith"
                        }  
             } );
         }
         </script>
       </head>
       <body>
          <div id="example"></div>
       </body>
    </html>

无需使用此处理器将结果片段返回给 JavaScript(尽管您可以在必要时),因为 XSLT 2.0 xsl:result-document 指令已扩展,因此它可以使用指定元素 id 的 href 属性要更新的 HTML 页面,例如:

<xsl:result-document href="#example" method="replace-content">
    <p><xsl:value-of select="ixsl:source()/books/book[@title = 'One']/></p>
</xsl:result-document>

Saxon-CE 文档的 API 部分有更多详细信息

于 2012-10-08T20:24:32.557 回答