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>

ここで、たとえば "course_name" のように変数 (javascript) を XSL に渡して、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サポートはXSL1.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 つの異なる形式の構文があります。1 つはコード内のものと同じですが、以下は別の構文の例です。同じコードがすべての主要なブラウザーで実行されます。

<!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>

XSLT 2.0 の xsl:result-document 命令が拡張され、要素の ID を指定する href 属性を使用できるようになったため、このプロセッサを使用して結果フラグメントを JavaScript に返す必要はありません (必要に応じて返すことができます)。更新する 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 に答える