Java 将参数从XSLT传递到模板
我一直在尝试将一个参数从转换传递到xsl文件,但当我尝试使用它的值时,它似乎总是为空 我的java代码: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
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();
}