2017-01-17 77 views
0

我是新来的XML,所以忍受着我。我需要将一个xml文件转换为另一个xml文件。它需要xslt 2.0。我正在使用撒克逊的s9api。使用他们的文件,这是我迄今为止:如何使用saxon s9api进行XSLT 2.0转换? XML文件到XML文件

import java.io.File; 
import javax.xml.transform.stream.StreamSource; 
import net.sf.saxon.s9api.DocumentBuilder; 
import net.sf.saxon.s9api.Processor; 
import net.sf.saxon.s9api.SaxonApiException; 
import net.sf.saxon.s9api.XsltCompiler; 
import net.sf.saxon.s9api.XsltExecutable; 
import net.sf.saxon.s9api.XsltTransformer; 



class Main{ 
    public static void main(String args[]){ 

     Processor processor = new Processor(false); 
     XsltCompiler compiler = processor.newXsltCompiler(); 
     DocumentBuilder builder = processor.newDocumentBuilder(); 
     try { 
      builder.build(new File("C:\\XMLFILE.xml")); 
     } catch (SaxonApiException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     try { 
      XsltExecutable xsl = compiler.compile(new StreamSource(new File("C:\\XSLFILE.xsl"))); 
      XsltTransformer trans = xsl.load(); 
      trans.transform(); 


     } catch (SaxonApiException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
} 

这是正确的方向?如果是这样,并且这实际上正在执行转换,我该如何指定输出xml。

回答

0

您可以在变压器上设置目的地,例如输出文件。

Serializer out = new Serializer(); 
out.setOutputProperty(Serializer.Property.METHOD, "html"); 
out.setOutputProperty(Serializer.Property.INDENT, "yes"); 
out.setOutputFile(new File("<filelocation>")); 

然后在变压器

transformer.setDestination(out); 

设置您拨打电话之前转换()。

trans.transform(); 
+0

我需要转换为xml。我可以用“xml”替换“html”吗? –

+0

它也给我以下错误:必须指定源文档,初始模板或初始函数。这不是我在第一次尝试块中所做的吗? –

+0

您还应该在变压器上设置初始上下文节点。你对builder.build()的调用应该返回一个XdmNode。使用XdmNode(比如source)设置一个局部变量,然后在变压器transformer.setInitialContextNode(source)上设置初始上下文。 –