Java 将参数从XSLT传递到模板

Java 将参数从XSLT传递到模板,java,xml,xslt,xpath,Java,Xml,Xslt,Xpath,我一直在尝试将一个参数从转换传递到xsl文件,但当我尝试使用它的值时,它似乎总是为空 我的java代码: myTransformer.setParameter("show", "all"); 以及xsl文件中参数的全局声明: <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:ou

我一直在尝试将一个参数从转换传递到xsl文件,但当我尝试使用它的值时,它似乎总是为空

我的java代码:

myTransformer.setParameter("show", "all");
以及xsl文件中参数的全局声明:

    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>
    <xsl:param name="show"/> 

我使用DOM和SAX解析器进行转换。我的目标是在xsl文件中使用额外的参数“show”,根据用户输入(java文件从中请求参数的html格式)以不同的方式显示一些xml属性。

您使用的方法看起来是正确的-它与我在自己的项目中使用的实现相匹配。如果有一个完整但简洁的XSL文件来演示这个问题,以及一个执行转换的Java方法,这将是非常有帮助的。因此,正如@vallismortis所说,编写一个完整的repo(并说明您使用的XSLT处理器)。我用更多的代码更新了帖子-希望我选择了正确的部分…我希望您的代码首先设置参数,然后调用
transform
方法:`myTransformer.setParameter(“show”、“'xml'”);转换(xmlSource,newstreamresult(pwr));`。这肯定是一个错误!太简单了!非常感谢你!您使用的方法看起来是正确的-它与我在自己的项目中使用的实现相匹配。如果有一个完整但简洁的XSL文件来演示这个问题,以及一个执行转换的Java方法,这将是非常有帮助的。因此,正如@vallismortis所说,编写一个完整的repo(并说明您使用的XSLT处理器)。我用更多的代码更新了帖子-希望我选择了正确的部分…我希望您的代码首先设置参数,然后调用
transform
方法:`myTransformer.setParameter(“show”、“'xml'”);转换(xmlSource,newstreamresult(pwr));`。这肯定是一个错误!太简单了!非常感谢你!您使用的方法看起来是正确的-它与我在自己的项目中使用的实现相匹配。如果有一个完整但简洁的XSL文件来演示这个问题,以及一个执行转换的Java方法,这将是非常有帮助的。因此,正如@vallismortis所说,编写一个完整的repo(并说明您使用的XSLT处理器)。我用更多的代码更新了帖子-希望我选择了正确的部分…我希望您的代码首先设置参数,然后调用
transform
方法:`myTransformer.setParameter(“show”、“'xml'”);转换(xmlSource,newstreamresult(pwr));`。这肯定是一个错误!太简单了!非常感谢你!
    <xsl:value-of select="$show"/>
    <xsl:value-of select="concat($show, ' =? ','all')"/>
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>
    <xsl:param name="show" /> 
    <xsl:template match="/">
        <html><body>
        <xsl:apply-templates>
        </xsl:apply-templates>
        </body></html>
    </xsl:template>
    <xsl:template match="/*">
        <h1 style="color: #FFFFFF; text-align: center;"></h1>
        <xsl:value-of select="$show"/>
        <xsl:value-of select="concat($show, ' =? ','all')"/>
        <table align="center" border="2" style="background-color: #ffffff;">
            <tr>
                <xsl:for-each select="*[position() = 1]/@*">
                <td><xsl:value-of select="concat(local-name(), ' ')"/></td>
                </xsl:for-each>
                <xsl:for-each select="*[position() = 1]/*">
                <td><xsl:value-of select="concat(local-name(), ' ')"/></td>
                </xsl:for-each>
            </tr>
            <xsl:apply-templates/>
        </table>
    </xsl:template>
</xsl:stylesheet>
public void init(ServletConfig config) throws UnavailableException {
        System.out.println("Init start");

    try {   
        ctx = config.getServletContext(); // we will use the 'contex' below
        absPath = ctx.getRealPath("/WEB-INF/carPresentor.xsl");
        xsltDoc = new SAXSource(new InputSource(absPath));
        tF = TransformerFactory.newInstance();
        DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
        fact.setNamespaceAware(true);
        DocumentBuilder builder = fact.newDocumentBuilder();
        doc = builder.parse(absPath);
        System.out.println("Name of document element is " + doc.getDocumentElement().getNodeName());
    } 

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("dopost start");
    System.out.println("Name of document element (at the post) is " + doc.getDocumentElement().getNodeName());
    String color = request.getParameter("color");
    String tablecolor = request.getParameter("table-color"); // edw to request 
    String xml = request.getParameter("show");
    PrintWriter pwr = response.getWriter();
    try {
        DOMSource ds = new DOMSource(doc);
        System.out.println(((Document) ds.getNode()).getDocumentElement().getNodeName() + " " + ((Document) ds.getNode()).getDocumentElement().getNodeValue());
        myTransformer = tF.newTransformer(new DOMSource(doc));
        myTransformer = tF.newTransformer(xsltDoc);
        myTransformer = tF.newTransformer(ds);
        StreamSource xmlSource; 
        xmlSource = new StreamSource(ctx.getResourceAsStream("/WEB-INF/cars.xml"));
        System.out.println("Sending back the xml transformed into html");
        response.setContentType("text/html"); //in order to put in http body
        myTransformer.transform(xmlSource, new StreamResult(pwr));
        myTransformer.setParameter("show", "'xml'"); 
        pwr.close();
    }