Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.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
Java 基于scala的saxonica 9 EE上的模式感知XSLT转换_Java_Xml_Scala_Xslt_Saxon - Fatal编程技术网

Java 基于scala的saxonica 9 EE上的模式感知XSLT转换

Java 基于scala的saxonica 9 EE上的模式感知XSLT转换,java,xml,scala,xslt,saxon,Java,Xml,Scala,Xslt,Saxon,我错过了什么?我不明白为什么我的转换不支持模式。 参考: 我知道文档很好,xsd/xslt/xml文件由其他系统处理,并且工作正常。我试图为自己创建一个桌面命令行工具 源代码 def main(args: Array[String]) { System.setProperty( "javax.xml.transform.TransformerFactory", "com.saxonica.config.EnterpriseTransformerFactory")

我错过了什么?我不明白为什么我的转换不支持模式。 参考:

  • 我知道文档很好,xsd/xslt/xml文件由其他系统处理,并且工作正常。我试图为自己创建一个桌面命令行工具

    源代码

    def main(args: Array[String]) 
    {
            System.setProperty(     "javax.xml.transform.TransformerFactory", "com.saxonica.config.EnterpriseTransformerFactory")
    
            val factory = new EnterpriseTransformerFactory()
            factory.setAttribute(FeatureKeys.SCHEMA_VALIDATION, new Integer(Validation.STRICT))
    
            val schemaXXX = new StreamSource( new File("PATH/to/xxx.xsd") )
            val schemaYYY = new StreamSource( new File("PATH/to/yyy.xsd") )
            factory.addSchema(schemaXXX)
            factory.addSchema(schemaYYY)
    
            val XSLT = new StreamSource(new File("PATH/to/zzz.xslt"))
            val transformer = factory.newTransformer(XSLT)
    
            val input = new StreamSource(new File("PATH/to/file.xml"))
    
            val result = new StringWriter();
            transformer.transform(input, new StreamResult(result))
    
            println(result.toString())
    }
    
    结果:

    The transformation is not schema-aware, so the source document must be untyped
    

    如果Saxon EE中的样式表显式使用xsl:import schema,或者用于编译它的XSLT编译器显式设置为模式感知,则认为它是模式感知的。使用s9api接口(XsltCompiler.setSchemaAware(true))更容易做到这一点,但也可以使用JAXP通过在TransformerFactory上设置属性
    FeatureKeys.XSLT\u SCHEMA\u AWARE
    (“”)来实现。您必须显式设置它的原因是,如果样式表在编译时知道所有内容都是非类型化的,则处理非类型化文档的速度会更快,因此我们不希望人们在迁移到Saxon EE时,如果不使用此功能,会产生额外的成本


    以后,请随时在saxonica.plan.io上提出支持问题,我们希望在24小时内给出答复。

    不熟悉Java环境。但是
    SchemaAwareTransformerFactory
    是否与
    EnterpriseTransformerFactory
    相同?@MathiasMüller给出了这样的回答:在任何情况下,SchemaAwareTransformerFactory在我的jar文件中都不可用,而EnterpriseTransformerFactory在旧版本中存在.SchemaAwareTransformerFactory,它已被EnterpriseTransformerFactory取代