2016-11-11 1 views
0

Я пытаюсь получить данные из SQL Server из XSL-шаблона с использованием Saxon SQL Extension. Но я получаю сообщение об ошибке:Saxon: доступ к базе данных SQL Server

Error in xsl:copy-of/@select on line 36 column 60 of sqlserver_books.xsl:
XTDE1450: Unknown extension instruction
Unknown extension instruction

  • Saxon версия: 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 " ' все работает. Но почему последняя версия не работает?

Спасибо.

+1

Вы можете добавить опцию '-t' в' java -cp% CLASSPATH% net.sf.saxon.Transform -t -config: config.xml -it: main -xsl: sqlserver_books.xsl -o: out. xml' и проверить вывод, действительно ли это PE с лицензией, запущенной при получении ошибки? –

+0

Я получаю «Никакой файл лицензии не найден - работает с лицензированными функциями отключено». Это означает, что «SQL Extension» не работает без лицензии? –

+2

Saxon PE и EE - это коммерческие продукты, которые вы можете запускать только с лицензией, вам нужна хотя бы пробная лицензия для тестирования и использования любых функций, таких как расширения, которые не поддерживаются версией HE с открытым исходным кодом. –

ответ

1

Я думаю, что Мартин Хоннен дал вам ответ: вы работаете без файла лицензии.

Смежные вопросы