2011-04-15 88 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