0

http://www.example.xmlなどの特定の URL で開く XSL-XML ページがあります。URL にhttp://www.example.xml?pLanguage=nl&source=enews などのパラメータが含まれている場合があります。

URL から source パラメータを抽出し、xsl:variable に入れたいと考えています。

window.top.location.search.substring(1); を使用してjavascriptで行うことを考えました。結果を xsl:variable に入れる方法がわかりません。

誰かが助けることができますか?

4

1 に答える 1

1

XSLT プロセッサは通常、スタイルシートでグローバル パラメータの値を設定する機能を提供します。たとえば、XSLTProcessorGecko では.

Gecko ベースのブラウザ (FireFox など) で動作する例を次に示します。

まず、xsl:param 名を持つスタイルシートが必要です。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- file: /xslt-stylesheet.xsl -->
<xsl:param name="pLanguage"></xsl:param>
<xsl:param name="source"></xsl:param>

<xsl:template match="/">
  <root>
    <pLanguage><xsl:value-of select="$pLanguage"/></pLanguage>
    <source><xsl:value-of select="$source"/></source>
   </root>
</xsl:template>

</xsl:stylesheet>

次に、ブラウザが解釈できるように、この JavaScript を html ファイルに挿入します。

// Var to hold the transformed document
var transformeddoc = null;
// source document to transform. We'll use document.body as an easy example.
var sourcedoc = document.body;
// extract parameters from the window's query string
var params = extractparams(window.location.search);
// create an xslt processor
var xsltproc = new XSLTProcessor();
// set stylesheet paramaters
xsltproc.setParameter(null, 'pLanguage', params.pLanguage);
xsltproc.setParameter(null, 'source', params.source);
// load xslt document
var xslt = document.implementation.createDocument("", "test", null);
xslt.addEventListener("load", processXslt, false);
xslt.load("/xslt-stylesheet.xsl");

// after document is loaded, perform the transform
function processXslt() {
    xsltproc.importStylesheet(xslt);
    transformeddoc = xsltproc.transformToDocument(sourcedoc);
    // transformeddoc is now a DOM of this xml:
    // <root><pLanguage>pl</pLanguage><source>sc</source></root>
}

function extractparams(querystring) {
    var params = {'pLanguage':'', 'source':''};
    var qs = querystring.replace(/^\?/, '');
    qs = qs.split('&');
    for (var i=0, kv; i<qs.length; i++) {
        kv = qs[i].split('=');
        if (kv.length===2 && kv[0] in params) {
            params[kv[0]] = kv[1];
        }
    }
    return params;
}
于 2012-09-19T13:59:15.877 に答える