Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SXST0068:忽略流式处理请求:此Saxon配置不支持使用Java进行流式处理_Java_Xslt 3.0 - Fatal编程技术网

SXST0068:忽略流式处理请求:此Saxon配置不支持使用Java进行流式处理

SXST0068:忽略流式处理请求:此Saxon配置不支持使用Java进行流式处理,java,xslt-3.0,Java,Xslt 3.0,我第一次尝试XSLT并使用XSLT3.0,它具有流功能。 我需要根据某些条件修改一个大约6 GB的巨大XML,我已经在参考库中的项目中配置了外部Jarsaxon9ee(也尝试了版本10),但它仍然给我错误: XSLTTemplate.xsl第3行第30列的xsl:mode处出现警告: SXST0068:忽略流式处理请求:此Saxon配置不支持流式处理 从Eclipse运行具有流功能的项目还不够吗 下面是我在Eclipse项目中引用的XSLT样式表 <?xml version=&qu

我第一次尝试XSLT并使用XSLT3.0,它具有流功能。 我需要根据某些条件修改一个大约6 GB的巨大XML,我已经在参考库中的项目中配置了外部Jarsaxon9ee(也尝试了版本10),但它仍然给我错误:

XSLTTemplate.xsl第3行第30列的xsl:mode处出现警告: SXST0068:忽略流式处理请求:此Saxon配置不支持流式处理

从Eclipse运行具有流功能的项目还不够吗

下面是我在Eclipse项目中引用的XSLT样式表

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:mode streamable="yes" on-no-match="shallow-copy"/>
    <xsl:template match="Image">
      <xsl:variable name="image" select="copy-of(.)"/>
      <xsl:sequence select="$image[width*height gt 100000]"/>
    </xsl:template>
    </xsl:stylesheet>

我认为这可能是某种类型的配置问题:可能由于某种原因,许可证文件没有被提取。但是使用JAXP转换接口进行流式处理也存在一个问题:JAXP指定您的主要源代码既用作
match=“/”
模板规则匹配的节点,也用作计算全局变量的上下文项。XSLT 3.0的流规则不允许全局上下文项成为流节点,因此这与JAXP规范相冲突。Saxon通过提供一个不同的
TransformerFactory
类用于流媒体,即
com.saxonica.config.StreamingTransformerFactory
,它支持流媒体,但在这方面与JAXP规范有所不同。使用它还表明了一个明确的意图,即如果流媒体等设施不可用(例如,因为找不到许可证文件),您依赖于Saxon EE并希望失败(而不是后退)。

它仍然会给出相同的错误,我是否在配置或编码方面遗漏了一些内容?对于诊断,调用
factory.getConfiguration().checkLicensedFeature(Configuration.LicenseFeature.ENTERPRISE_XSLT,“XSLT流媒体”,-1)我怀疑这将确认未找到许可证文件。这可能是一个类路径问题。在Eclipse上获得正确的类路径有点困难。作为通过类路径加载许可证文件的替代方法,请尝试设置属性
”http://saxon.sf.net/feature/licenseFileLocation“
到许可证文件的完整路径。是的,您是对的checkLicensedFeature告诉我它没有归档许可证文件时出错。但我认为我在这里一直缺乏知识,从进一步的研究中,我发现我需要获得30天评估许可证文件或需要购买许可证。此外,30天评估文件不应用于生产,因为它有一些限制。这是否意味着如果我希望我的代码用于生产,我需要购买许可证?是的,要在Saxon中使用流模式,您需要购买许可证。
    import java.io.File;

    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Result;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.stream.StreamResult;
    import javax.xml.transform.stream.StreamSource;

    public class XMLTransformWithXSLT
    {

      public static void main( String[] args ) throws Throwable
      {

        //InputStream i = XMLTransformWithXSLT.class.getResourceAsStream( "XSLTTemplate" );
        StreamSource input = new StreamSource( "C:\\Users\\abc\\Merged.xml" ); //$NON-NLS-1$
        StreamSource xsl = new StreamSource( "Files\\XSLTTemplate.xsl" );        
Result output = new StreamResult( new File( "C:\\Users\\abc\\MergedOuput.xml" ) ); //$NON-NLS-1$

        TransformerFactory factory = new net.sf.saxon.TransformerFactoryImpl();
        //TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer( xsl );
        transformer.setOutputProperty( OutputKeys.INDENT, "yes" );
        transformer.transform( input, output );

        //System.out.println( output );
      }
    }