Java Saxon转换错误-XTDE1450:未知的扩展指令
我试图使用SQL查询从XSLT2.0查询MySQL数据库,并在XSLT文件中填充一个参数。我正在使用Java Saxon转换错误-XTDE1450:未知的扩展指令,java,mysql,xslt,xslt-2.0,saxon,Java,Mysql,Xslt,Xslt 2.0,Saxon,我试图使用SQL查询从XSLT2.0查询MySQL数据库,并在XSLT文件中填充一个参数。我正在使用saxon9ee.jar以及saxon9sql.jar 我找到了链接,但没有解决我的问题 我得到以下错误: Connecting MySQL... Connected... Error on line 43 of DB_Query_XSLT_Test.xsl: XTDE1450: Unknown extension instruction ; SystemID: file:///C:/User
saxon9ee.jar
以及saxon9sql.jar
我找到了链接,但没有解决我的问题
我得到以下错误:
Connecting MySQL...
Connected...
Error on line 43 of DB_Query_XSLT_Test.xsl:
XTDE1450: Unknown extension instruction
; SystemID: file:///C:/Users/davo/platform/src/config/xslt/DB_Query_XSLT_Test.xsl; Line#: 43; Column#: -1
net.sf.saxon.trans.XPathException: Unknown extension instruction
at net.sf.saxon.expr.ErrorExpression.evaluateItem(ErrorExpression.java:58)
at net.sf.saxon.expr.ErrorExpression.iterate(ErrorExpression.java:71)
at net.sf.saxon.expr.Expression.process(Expression.java:467)
at net.sf.saxon.instruct.DocumentInstr.evaluateItem(DocumentInstr.java:305)
at net.sf.saxon.functions.StringFn.evaluateItem(StringFn.java:62)
at net.sf.saxon.instruct.ValueOf.processLeavingTail(ValueOf.java:246)
at net.sf.saxon.instruct.Block.processLeavingTail(Block.java:619)
at net.sf.saxon.instruct.Instruction.process(Instruction.java:93)
at net.sf.saxon.instruct.ElementCreator.processLeavingTail(ElementCreator.java:301)
at net.sf.saxon.instruct.Instruction.process(Instruction.java:93)
at net.sf.saxon.instruct.ElementCreator.processLeavingTail(ElementCreator.java:301)
at net.sf.saxon.instruct.Instruction.process(Instruction.java:93)
at net.sf.saxon.instruct.ElementCreator.processLeavingTail(ElementCreator.java:301)
at net.sf.saxon.instruct.Block.processLeavingTail(Block.java:619)
at net.sf.saxon.instruct.Instruction.process(Instruction.java:93)
at net.sf.saxon.instruct.ElementCreator.processLeavingTail(ElementCreator.java:301)
at net.sf.saxon.instruct.Template.applyLeavingTail(Template.java:229)
at net.sf.saxon.instruct.ApplyTemplates.applyTemplates(ApplyTemplates.java:354)
at net.sf.saxon.Controller.transformDocument(Controller.java:1849)
at net.sf.saxon.Controller.transform(Controller.java:1700)
at com.alu.ipprd.aor.fsw.tt.util.xml.transform.XSLTUtil.transformXML(XSLTUtil.java:52)
at com.alu.ipprd.aor.fsw.tt.util.xml.transform.XSLTUtil.main(XSLTUtil.java:214)
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tro="http://www.example.org/TroubleTicketWS_v3/">
<soapenv:Header/>
<soapenv:Body>
<tro:CreateTroubleTicketByValueRequest
正在连接MySQL。。。
有联系的。。。
DB_Query_XSLT_Test.xsl第43行出错:
XTDE1450:未知的扩展指令
; 系统ID:file:///C:/Users/davo/platform/src/config/xslt/DB_Query_XSLT_Test.xsl; 第#:43行;列#::-1
net.sf.saxon.trans.XPathException:未知的扩展指令
位于net.sf.saxon.expr.ErrorExpression.evaluateItem(ErrorExpression.java:58)
在net.sf.saxon.expr.ErrorExpression.iterate(ErrorExpression.java:71)
位于net.sf.saxon.expr.Expression.process(Expression.java:467)
位于net.sf.saxon.instruction.DocumentInstr.evaluateItem(DocumentInstr.java:305)
位于net.sf.saxon.functions.StringFn.evaluateItem(StringFn.java:62)
位于net.sf.saxon.instruction.ValueOf.processLeavingTail(ValueOf.java:246)
net.sf.saxon.instruction.Block.processLeavingTail(Block.java:619)
at net.sf.saxon.Instruction.Instruction.process(Instruction.java:93)
位于net.sf.saxon.direction.ElementCreator.processLeavingTail(ElementCreator.java:301)
at net.sf.saxon.Instruction.Instruction.process(Instruction.java:93)
位于net.sf.saxon.direction.ElementCreator.processLeavingTail(ElementCreator.java:301)
at net.sf.saxon.Instruction.Instruction.process(Instruction.java:93)
位于net.sf.saxon.direction.ElementCreator.processLeavingTail(ElementCreator.java:301)
net.sf.saxon.instruction.Block.processLeavingTail(Block.java:619)
at net.sf.saxon.Instruction.Instruction.process(Instruction.java:93)
位于net.sf.saxon.direction.ElementCreator.processLeavingTail(ElementCreator.java:301)
位于net.sf.saxon.instruction.Template.applyLeavingTail(Template.java:229)
位于net.sf.saxon.instruction.ApplyTemplates.ApplyTemplates(ApplyTemplates.java:354)
位于net.sf.saxon.Controller.transformDocument(Controller.java:1849)
at net.sf.saxon.Controller.transform(Controller.java:1700)
位于com.alu.ipprd.aor.fsw.tt.util.xml.transform.XSLTUtil.transformXML(XSLTUtil.java:52)
位于com.alu.ipprd.aor.fsw.tt.util.xml.transform.XSLTUtil.main(XSLTUtil.java:214)
您有import net.sf.saxon.TransformerFactoryImpl代码>和工厂=新的TransformerFactoryImpl()
,要使用Saxon EE,您需要导入com.saxonica.config.EnterpriseTransformerFactory代码>和工厂=新企业TransformerFactory()代码>。请参阅。您确定您的Java代码使用Saxon EE创建了一个转换器吗?您是否可以调试并查看您创建的transformer
具有哪个类?您是否知道可以添加到pom.xml以支持Saxon EE的maven依赖项?在更新建议的更改后,我也会收到相同的错误。堆栈跟踪现在是否至少没有不同?是否有迹象表明使用EE代替HE?您是否拥有类路径上Saxon EE的许可证?您使用的是哪一版本的Saxon EE?跟踪没有变化。我在类路径中添加了saxon9ee.jar。我不知道这里的许可是什么意思。您需要一个来自Saxonica的许可文件才能使用Saxon EE或PE,并且该许可文件必须位于类路径上。你有Saxonica的执照吗?如果没有,您首先需要购买许可证,或者至少向他们申请试用许可证,以便能够使用EE或PE。
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:sql="http://saxon.sf.net/sql"
extension-element-prefixes="sql"
exclude-result-prefixes="xs">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:variable name="driver" select="'com.mysql.jdbc.Driver'"
as="xs:string" />
<xsl:variable name="database"
select="'jdbc:mysql://xxx.xxx.xxx.xxx:3306/platform'" as="xs:string" />
<xsl:variable name="user" select="'dbremote'" as="xs:string" />
<xsl:variable name="password" select="'dbremote'" as="xs:string" />
<xsl:template match="/">
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tro="http://www.example.org/TroubleTicketWS_v3/">
<soapenv:Header />
<soapenv:Body>
<tro:CreateTroubleTicketByValueRequest>
<ticketkey>
<xsl:message>Connecting MySQL...</xsl:message>
<xsl:variable name="connection" as="java:java.sql.Connection" xmlns:java="http://saxon.sf.net/java-type">
<sql:connect driver="{$driver}" database="{$database}" user="{$user}" password="{$password}">
<xsl:fallback>
<xsl:message terminate="yes">Connection to MySQL failed.</xsl:message>
</xsl:fallback>
</sql:connect>
</xsl:variable>
<xsl:message>Connected...</xsl:message>
<xsl:variable name="internalticketid" select="/tTroubleticket/internalticketid" />
<xsl:variable name="troubleticketkey">
<sql:query connection="$connection" table="T_TROUBLETICKET"
column="TROUBLETICKETKEY" row-tag="ticket" column-tag="ttf"
where="INTERNALTICKETID={$internalticketid}" />
</xsl:variable>
<xsl:value-of select="$troubleticketkey" />
</ticketkey>
</tro:CreateTroubleTicketByValueRequest>
</soapenv:Body>
</soapenv:Envelope>
</xsl:template>
</xsl:stylesheet>
package com.fsw.tt.util.xml.transform;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
//import net.sf.saxon.TransformerFactoryImpl;
import com.saxonica.config.EnterpriseTransformerFactory;
public class XSLTUtil {
TransformerFactory factory = null;
public XSLTUtil() {
//factory = new TransformerFactoryImpl();
factory = new EnterpriseTransformerFactory();
}
public String transformXML(String inXML, String XSLTFilename) throws TransformerFactoryConfigurationError, TransformerException {
StringWriter xmlResultResource = new StringWriter();
try {
Source xslDoc = new StreamSource(XSLTFilename);
Transformer transformer = factory.newTransformer(xslDoc);
transformer.transform(new StreamSource(new StringReader(inXML)), new StreamResult(xmlResultResource));
} catch (TransformerException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return xmlResultResource.getBuffer().toString();
}
public static void main(String[] args) throws TransformerFactoryConfigurationError, TransformerException {
String xmlSourceResource = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
+ "<tTroubleticket>"
+ "<internalticketid>INC0789543765790</internalticketid>"
+ "</tTroubleticket>";
String xsltFilename = "C:/Users/davo/platform/src/config/xslt/DB_Query_XSLT_Test.xsl";
XSLTUtil util = new XSLTUtil();
String transformedXML = util.transformXML(xmlSourceResource, xsltFilename);
System.out.println(transformedXML);
}
}