我想念什么?我不明白为什么我的转换不支持模式。参考:
我知道文档很好,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_SCHEMA_AWARE
(“ http://saxon.sf.net/feature/xsltSchemaAware ”)来完成此操作。您必须对此进行明确设置的原因是,如果样式表在编译时知道所有类型都将变为非类型,则处理非类型化文档的速度会更快,因此,我们不希望人们在不使用Saxon-EE的情况下转移到Saxon-EE上而产生额外的费用。 t使用此功能。
将来,请随时在saxonica.plan.io上提出支持问题,我们的目标是在24小时内给予答复。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句