Java 基于scala的saxonica 9 EE上的模式感知XSLT转换
我错过了什么?我不明白为什么我的转换不支持模式。 参考: 我知道文档很好,xsd/xslt/xml文件由其他系统处理,并且工作正常。我试图为自己创建一个桌面命令行工具 源代码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")
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取代