Saxon:访问 SQL 服务器数据库
Saxon: access to SQL Server database
我正在尝试使用 Saxon SQL 扩展从 XSL 模板从 SQL 服务器获取数据。但是我得到一个错误:
Error in xsl:copy-of/@select on line 36 column 60 of sqlserver_books.xsl:
XTDE1450: Unknown extension instruction
Unknown extension instruction
- 撒克逊版本:SaxonPE 9-7-0-11
- Java版本:1.8.0_60
命令:
SET CLASSPATH=SaxonPE9-7-0-11J/saxon9pe.jar;SaxonPE9-7-0-11J/saxon9-sql.jar;sqljdbc4.jar
java -cp %CLASSPATH% net.sf.saxon.Transform -config:config.xml -it:main -xsl:sqlserver_books.xsl -o:out.xml
sqlserver_books.xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sql="http://saxon.sf.net/sql"
xmlns:java="http://saxon.sf.net/java-type"
xmlns:saxon="http://saxon.sf.net/"
extension-element-prefixes="saxon sql">
<xsl:param name="jdbc.driver" as="xsd:string" select="string('com.microsoft.sqlserver.jdbc.SQLServerDriver')" />
<xsl:param name="jdbc.database" as="xsd:string" select="string('jdbc:sqlserver://localhost:1433;databaseName=test')" />
<xsl:param name="jdbc.user" as="xsd:string" select="string('testuser')" />
<xsl:param name="jdbc.pass" as="xsd:string" select="string('pass')" />
<xsl:template name="main">
<xsl:choose>
<xsl:when test="element-available('sql:connect')">
<xsl:variable name="sql.conn" as="java:java.sql.Connection">
<sql:connect driver="{$jdbc.driver}" database="{$jdbc.database}" user="{$jdbc.user}" password="{$jdbc.pass}">
<xsl:fallback>
<xsl:message terminate="yes">SQL extensions are not installed</xsl:message>
</xsl:fallback>
</sql:connect>
</xsl:variable>
<xsl:variable name="sql.books" as="element()*">
<sql:query connection="$sql.conn" table="dbo.Books" column="*" />
</xsl:variable>
<xsl:copy-of select="$sql.books" />
<sql:close connection="$sql.conn" />
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">sql:connect element is not available</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://saxon.sf.net/ns/configuration" edition="PE">
<global allowExternalFunctions="true" versionOfXml="1.0"/>
<xslt>
<extensionElement namespace="http://saxon.sf.net/sql"
factory="net.sf.saxon.option.sql.SQLElementFactory"/>
</xslt>
</configuration>
我不明白我做错了什么。
我已经使用以下命令尝试了旧版本 saxonb9-1-0-8j:
SET CLASSPATH=saxonb9-1-0-8j/saxon9.jar;saxonb9-1-0-8j/saxon9-sql.jar;sqljdbc4.jar
java net.sf.saxon.Transform -it:main -xsl:sqlserver_books.xsl -o:out.xml
并且在将 'xmlns:sql="http://saxon.sf.net/sql"' 更改为 'xmlns:sql="java://net.sf.saxon.sql.SQLElementFactory"'
一切正常。但是为什么最新版本不能用?
谢谢。
我想 Martin Honnen 已经给了你答案:你 运行 没有许可证文件。
我正在尝试使用 Saxon SQL 扩展从 XSL 模板从 SQL 服务器获取数据。但是我得到一个错误:
Error in xsl:copy-of/@select on line 36 column 60 of sqlserver_books.xsl:
XTDE1450: Unknown extension instruction
Unknown extension instruction
- 撒克逊版本:SaxonPE 9-7-0-11
- Java版本:1.8.0_60
命令:
SET CLASSPATH=SaxonPE9-7-0-11J/saxon9pe.jar;SaxonPE9-7-0-11J/saxon9-sql.jar;sqljdbc4.jar
java -cp %CLASSPATH% net.sf.saxon.Transform -config:config.xml -it:main -xsl:sqlserver_books.xsl -o:out.xml
sqlserver_books.xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sql="http://saxon.sf.net/sql"
xmlns:java="http://saxon.sf.net/java-type"
xmlns:saxon="http://saxon.sf.net/"
extension-element-prefixes="saxon sql">
<xsl:param name="jdbc.driver" as="xsd:string" select="string('com.microsoft.sqlserver.jdbc.SQLServerDriver')" />
<xsl:param name="jdbc.database" as="xsd:string" select="string('jdbc:sqlserver://localhost:1433;databaseName=test')" />
<xsl:param name="jdbc.user" as="xsd:string" select="string('testuser')" />
<xsl:param name="jdbc.pass" as="xsd:string" select="string('pass')" />
<xsl:template name="main">
<xsl:choose>
<xsl:when test="element-available('sql:connect')">
<xsl:variable name="sql.conn" as="java:java.sql.Connection">
<sql:connect driver="{$jdbc.driver}" database="{$jdbc.database}" user="{$jdbc.user}" password="{$jdbc.pass}">
<xsl:fallback>
<xsl:message terminate="yes">SQL extensions are not installed</xsl:message>
</xsl:fallback>
</sql:connect>
</xsl:variable>
<xsl:variable name="sql.books" as="element()*">
<sql:query connection="$sql.conn" table="dbo.Books" column="*" />
</xsl:variable>
<xsl:copy-of select="$sql.books" />
<sql:close connection="$sql.conn" />
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">sql:connect element is not available</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://saxon.sf.net/ns/configuration" edition="PE">
<global allowExternalFunctions="true" versionOfXml="1.0"/>
<xslt>
<extensionElement namespace="http://saxon.sf.net/sql"
factory="net.sf.saxon.option.sql.SQLElementFactory"/>
</xslt>
</configuration>
我不明白我做错了什么。
我已经使用以下命令尝试了旧版本 saxonb9-1-0-8j:
SET CLASSPATH=saxonb9-1-0-8j/saxon9.jar;saxonb9-1-0-8j/saxon9-sql.jar;sqljdbc4.jar
java net.sf.saxon.Transform -it:main -xsl:sqlserver_books.xsl -o:out.xml
并且在将 'xmlns:sql="http://saxon.sf.net/sql"' 更改为 'xmlns:sql="java://net.sf.saxon.sql.SQLElementFactory"' 一切正常。但是为什么最新版本不能用?
谢谢。
我想 Martin Honnen 已经给了你答案:你 运行 没有许可证文件。