2011-04-15 86 views
0

我使用xslt1.0將html轉換爲xml。我想爲一些內置函數遷移到xslt2.0。目前我改造的代碼是這樣,需要使用saxon將html轉換爲使用xslt的xml

import javax.xml.transform.OutputKeys; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 

和轉換方法是

public static String convert(String inputHtml, String xsl) throws Exception { 
     File xsltFile = new File(xsl); 

     InputStream is = new ByteArrayInputStream(inputHtml.getBytes("UTF-8")); 
     javax.xml.transform.Source xmlSource = new javax.xml.transform.stream.StreamSource(is); 
     javax.xml.transform.Source xsltSource = new javax.xml.transform.stream.StreamSource(xsltFile); 
     StringWriter sw = new StringWriter(); 

     javax.xml.transform.Result result = new javax.xml.transform.stream.StreamResult(sw); 

     javax.xml.transform.TransformerFactory transFact = javax.xml.transform.TransformerFactory.newInstance(); 
     javax.xml.transform.Transformer trans = transFact.newTransformer(xsltSource); 

     trans.transform(xmlSource, result); 
     return sw.getBuffer().toString(); 
    } 

如何爲撒克遜處理器寫?在此先感謝

+0

好,從xslt1.0到xslt2.0的差異將在xsl文件中,而不是在java代碼中。 – MeBigFatGuy 2011-04-15 06:14:33

+0

您是否意味着我們可以將xsl文件的版本從1.0更改爲2.0? – vignesh 2011-04-15 06:35:09

回答

1

Java代碼不需要更改:如果Saxon9.3在類路徑上,它應該加載它並自動使用它。但是,如果你想成爲100%的信心,撒克遜被加載(這可能是如果代碼使用XSLT 2.0或撒克遜擴展是一個好主意),然後換行

TransformerFactory transFact javax.xml.transform.TransformerFactory.newInstance(); 

TransformerFactory transFact = new net.sf.saxon.TransformerFactoryImpl(); 
+0

順便提一下,我傾向於將HTML字符串包裝在StringReader中,並將其傳遞給InputSource,而不是通過ByteArrayInputStream。 – 2011-04-15 08:34:22

+0

它的工作時,我的輸入是xml和xslt轉換爲html,但是當我的輸入是html和xslt轉換爲xml,其顯示錯誤,如 java.lang.NullPointerException在org.apache.xerces.parsers.AbstractSAXParser.setContentHandler在 net.sf.saxon.TransformerFactoryImpl(未知來源) 在net.sf.saxon.PreparedStylesheet.loadStylesheetModule(PreparedStylesheet.java:261) 在net.sf.saxon.PreparedStylesheet.prepare(PreparedStylesheet.java:185) .newTemplates(TransformerFactoryImpl.java:132) at net.sf.saxon.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:87) – vignesh 2011-04-30 04:37:11