我知道文档很好,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
答案 0 :(得分:1)
如果Saxon-EE中的样式表明确使用xsl:import-schema,或者用于编译它的XSLT编译器明确设置为模式识别,则它被认为是模式感知的。使用s9api接口(XsltCompiler.setSchemaAware(true))更容易完成,但也可以通过在TransformerFactory上设置属性FeatureKeys.XSLT_SCHEMA_AWARE
(“http://saxon.sf.net/feature/xsltSchemaAware”)使用JAXP来完成。你必须明确设置它的原因是,如果样式表在编译时知道所有内容都是无类型的,那么处理无类型文档的速度会更快,因此我们不希望人们在迁移到Saxon-EE时会产生额外的成本,如果他们不是使用此功能。
将来请随时在saxonica.plan.io上提出支持问题,我们的目标是在24小时内给出答复。