【问题标题】:schema-aware XSLT transform on saxonica 9 EE with scala带有 scala 的 saxonica 9 EE 上的模式感知 XSLT 转换
【发布时间】:2014-08-27 13:56:51
【问题描述】:

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

  1. http://www.saxonica.com/documentation/schema-processing/satransformapi.html
  2. http://www.saxonica.com/documentation9.4-demo/html/changes/intro92/install92.html

我知道文档很好,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

【问题讨论】:

  • 不熟悉Java环境。但是SchemaAwareTransformerFactoryEnterpriseTransformerFactory一样吗?
  • @MathiasMüller 给出这个是:saxonica.com/documentation9.4-demo/html/changes/intro92/… 在任何情况下,SchemaAwareTransformerFactory 在我的 jar 文件中不可用,而 EnterpriseTransformerFactory 是。
  • SchemaAwareTransformerFactory 存在于旧版本中,已被 EnterpriseTransformerFactory 取代

标签: java xml scala xslt saxon


【解决方案1】:

如果 Saxon-EE 中的样式表显式使用 xsl:import-schema,或者用于编译它的 XSLT 编译器被显式设置为模式感知,则认为它是模式感知的。这使用 s9api 接口 (XsltCompiler.setSchemaAware(true)) 更容易完成,但也可以使用 JAXP 通过在 TransformerFactory 上设置属性 FeatureKeys.XSLT_SCHEMA_AWARE ("http://saxon.sf.net/feature/xsltSchemaAware") 来完成。您必须明确设置的原因是,如果样式表在编译时知道所有内容都将是无类型的,那么处理无类型文档会更快,因此我们不希望人们在迁移到 Saxon-EE 时产生额外成本。 t 使用此功能。

以后请随时在 saxonica.plan.io 提出支持问题,我们的目标是在 24 小时内给予答复。

【讨论】:

    猜你喜欢
    • 2021-08-09
    • 2021-09-05
    • 2019-11-13
    • 2022-01-20
    • 2021-12-29
    • 2018-04-22
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多