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