XSLT не получает параметр, переданный из JavaScript - PullRequest
1 голос
/ 22 августа 2011

Очень простой код, я просто не мог заставить его работать.Параметр в XSLT всегда пуст.Что мне не хватает?Я использую FF6.Пожалуйста, помогите, ребята, с острыми глазами.Спасибо!

index.html

<html>
<head>
<script>
function loadXMLDoc(dname) {
    xhttp = new XMLHttpRequest();
    xhttp.open("GET", dname, false);
    xhttp.send("");
    return xhttp.responseXML;
}
function displayResult(source,styledoc,section) {
    xml = loadXMLDoc(source);
    xsl = loadXMLDoc(styledoc);

    if (window.ActiveXObject) {
        ex = xml.transformNode(xsl);
        document.getElementById("display").innerHTML = ex;
    }
    else if (document.implementation && document.implementation.createDocument) {
        xsltProcessor = new XSLTProcessor();
        xsltProcessor.importStylesheet(xsl);
        xsltProcessor.setParameter(null,"section",section);
        alert(xsltProcessor.getParameter(null,"section"));
        resultDocument = xsltProcessor.transformToFragment(xml, document);
        document.getElementById("display").appendChild(resultDocument);
    }
}
</script>
</head>
<body onload="displayResult('test.xml','test.xslt','somevalue')">
<div id="display"/>
</body>
</html>

test.xslt

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template  match="/">
    <xsl:param name="section"/>
        section=<xsl:value-of select="$section"/>
    </xsl:template>
</xsl:stylesheet>

test.xml

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="test.xslt"?>
<test/>

1 Ответ

3 голосов
/ 23 августа 2011

setParameter () установит глобальную переменную (параметр).

Вам необходимо переместить элемент param из элемента template, чтобы сделать его дочерним элементом элемента stylesheet, в противном случае он переопределит глобальный параметр.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="section"/>
<xsl:template  match="/">   
        section=<xsl:value-of select="$section"/>
    </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...