Мы создаем приложения с использованием XSLT под CentOS 7.6, tomcat 9.0.20 и OpenJDK11.
Я хочу преобразовать и вывести XML-документ, определенный в файле JSP с XSL, но следующее сообщение об ошибке:вывод, я не могу использовать расширение саксонии.
[сообщение об ошибке] net.sf.saxon.trans.XPathException: неизвестная инструкция расширения саксон: пока
Вы можете использовать расширение саксон в CentOS6.x, tomcat 8.0.9 и среды Oracle JDK 1.8.112.
Если вы знаете, как устранить ошибку, сообщите нам, какая информация вам нужна.
Ниже приведены шагидля проверки операции после настройки среды и подробных сообщений об ошибке.
- Создайте файл JSP и файл XSL и поместите их в примеры Tomcat.
[SaxonSample.jsp: /opt/tomcat/webapps/examples/jsp/xml/SaxonSample.jsp]
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix = "x" uri = "http://java.sun.com/jsp/jstl/xml" %>
<html>
<head>
<title>JSTL x:transform Tags</title>
</head>
<body>
<h3>Books Info:</h3>
<c:set var = "xmltext">
<books>
<book>
<name>Padam History</name>
<author>ZARA</author>
<price>100</price>
</book>
<book>
<name>Great Mistry</name>
<author>NUHA</author>
<price>2000</price>
</book>
</books>
</c:set>
<c:import url = "http://server_ip:8080/examples/jsp/xml/style.xsl" var = "xslt"/>
<x:transform xml = "${xmltext}" xslt = "${xslt}"/>
</body>
</html>
[style.xsl: /opt/tomcat/webapps/examples/jsp/xml/style.xsl]
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:saxon="http://saxon.sf.net/"
extension-element-prefixes="saxon"
>
<xsl:variable name="i" select="0" saxon:assignable="yes"/>
<xsl:output method = "html" indent = "yes"/>
<xsl:template match = "/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
<saxon:while test="$i < 10">
<p>The value of i is <xsl:value-of select="$i"/></p>
<saxon:assign name="i" select="$i+1"/>
</saxon:while>
</xsl:template>
<xsl:template match = "books">
<table border = "1" width = "100%">
<xsl:for-each select = "book">
<tr>
<td>
<i><xsl:value-of select = "name"/></i>
</td>
<td>
<xsl:value-of select = "author"/>
</td>
<td>
<xsl:value-of select = "price"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
Поместите саксонскую библиотеку ниже и перезапустите tomcat
・ Saxon9pe.jar ・ Saxon9pe-test.jar ・ Saxon9-sql.jar ・ Saxon-license.lic
Расположение: [/ opt / tomcat / lib] и [/ opt / tomcat / webapps / examples / WEB-INF / lib /]
[Подробности сообщений об ошибках]
net.sf.saxon.trans.XPathException: Unknown extension instruction saxon:while
net.sf.saxon.expr.ErrorExpression.evaluateItem(ErrorExpression.java:137)
net.sf.saxon.expr.Expression.process(Expression.java:929)
net.sf.saxon.expr.instruct.Block.processLeavingTail(Block.java:689)
net.sf.saxon.expr.instruct.TemplateRule.applyLeavingTail(TemplateRule.java:347)
net.sf.saxon.trans.Mode.applyTemplates(Mode.java:505)
net.sf.saxon.Controller.transformDocument(Controller.java:2411)
net.sf.saxon.Controller.transform(Controller.java:1979)
net.sf.saxon.s9api.XsltTransformer.transform(XsltTransformer.java:596)
net.sf.saxon.jaxp.TransformerImpl.transform(TransformerImpl.java:73)
org.apache.taglibs.standard.tag.common.xml.TransformSupport.doEndTag(TransformSupport.java:151)
org.apache.jsp.jsp.xml.SaxonSample_jsp._jspx_meth_x_005ftransform_005f0(SaxonSample_jsp.java:281)
org.apache.jsp.jsp.xml.SaxonSample_jsp._jspService(SaxonSample_jsp.java:154)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:444)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)