2014-08-27 30 views
2

我錯過了什麼?我無法弄清楚爲什麼我的轉換不支持模式。 編號:用scala對saxonica 9 EE進行架構感知XSLT轉換

  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 
+0

不熟悉Java環境。但是'SchemaAwareTransformerFactory'和'EnterpriseTransformerFactory'是一樣的嗎? – 2014-08-27 15:29:08

+0

@MathiasMüller給出的是:http://www.saxonica.com/documentation9.4-demo/html/changes/intro92/install92.html 無論如何,SchemaAwareTransformerFactory在我的jar文件中不可用,而EnterpriseTransformerFactory是。 – user2346536 2014-08-27 15:33:12

+0

SchemaAwareTransformerFactory存在於舊版本中,它已被EnterpriseTransformerFactory – 2014-08-31 12:06:29

回答

1

撒克遜-EE樣式表被認爲是感知模式,如果它明確地使用XSL:進口型模式,或者如果用於編譯它的XSLT編譯器顯式設置爲模式感知。使用s9api接口(XsltCompiler.setSchemaAware(true))可以輕鬆完成此操作,但也可以使用JAXP通過在TransformerFactory上設置屬性FeatureKeys.XSLT_SCHEMA_AWARE(「http://saxon.sf.net/feature/xsltSchemaAware」)來完成。你必須明確地設置它的原因是,如果樣式表在編譯時知道所有東西都是無類型的,那麼處理非類型化的文檔會更快,所以我們不希望人們在遷移到Saxon-EE時承擔額外的成本, t使用此功能。

以後請隨時在saxonica.plan.io上提出支持問題,我們希望在24小時內給出答覆。