当前位置: 首页 > 知识库问答 >
问题:

撒克逊语:访问 SQL Server 数据库

爱炯
2023-03-14

我试图使用Saxon SQL Extension从XSL模板中获取SQL Server的数据。但我得到一个错误:

xsl中的错误:复制/@选择在sqlserver_books.xsl的第36行第60列:
XTDE1450:未知扩展指令
未知扩展指令

    < li>Saxon版本:SaxonPE 9-7-0-11 < li>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>

配置.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个答案

商俊智
2023-03-14

我想Martin Honnen已经给了你答案:你是在没有许可文件的情况下运行的。

 类似资料:
  • 当我运行grails测试时,我得到了一个错误:我对这个问题做了很多研究,但无法解决它。我查阅了许多论坛,公共主题看起来像是GrailsJUnitRunner试图使用saxon解析而不是xalan,这导致了这个错误。报告生成不起作用。有人面对过这个问题吗?我的BuildConfig中有saxon库。棒极了 我注意到,当我使用

  • 我想使用Spring的RestTemplate plus Jackson来使用Web服务。我已经学习了几本教程,并且已经达到了创建DAO的目的。这是我获取所有域对象的方法: 但我的Web服务不会立即返回Station对象数组,而是以这种方式返回一个更具语义的表达式: 所以我的问题是,我不知道如何“告诉”RestTemplate在“stations”指示符之后立即解析对象列表,而不创建临时对象,这似

  • 当我尝试反序列化汽车类时,我得到了下面的错误。杰克逊正试图在父类中的子元素中搜索字段。我如何确保杰克逊使用适当的子类型进行反序列化?我相信我需要使用混合/客户转换器。但我不确定如何在这个特定场景中使用它们。 注意:在我的例子中,除TestMain之外的所有类都在一个jar文件中,我不能修改源文件。 错误 线程"main"中的异常com.fasterxml.jackson.databind.exc.

  • ActiveX Data Objects (ADO) 是一项容易使用并且可扩展的将数据库访问添加到 Web 页的技术。可以使用 ADO 去编写紧凑简明的脚本以便连接到 Open Database Connectivity (ODBC) 兼容的数据库和 OLE DB 兼容的数据源。如果您是一个对数据库连接有一定了解的脚本编写人员,那么您将发现 ADO 命令语句并不复杂而且容易掌握。同样地,如果您是一

  • 对许多Web应用程序而言,数据库都是其核心所在。数据库几乎可以用来存储你想查询和修改的任何信息,比如用户信息、产品目录或者新闻列表等。 Go没有内置的驱动支持任何的数据库,但是Go定义了database/sql接口,用户可以基于驱动接口开发相应数据库的驱动,5.1小节里面介绍Go设计的一些驱动,介绍Go是如何设计数据库驱动接口的。5.2至5.4小节介绍目前使用的比较多的一些关系型数据驱动以及如何使

  • 程序运行的时候,数据都是在内存中的。当程序终止的时候,通常都需要将数据保存到磁盘上,无论是保存到本地磁盘,还是通过网络保存到服务器上,最终都会将数据写入磁盘文件。 而如何定义数据的存储格式就是一个大问题。如果我们自己来定义存储格式,比如保存一个班级所有学生的成绩单: 名字 成绩 Michael 99 Bob 85 Bart 59 Lisa 87 你可以用一个文本文件保存,一行保存一个学生,用,隔开