2017-01-17 11 views
0

Я новичок в XML, так что несите меня. Мне нужно преобразовать xml-файл в другой XML-файл. Он нуждается в xslt 2.0. Я использую sa9on s9api. Используя их документацию, это то, что у меня есть до сих пор:Как сделать преобразование XSLT 2.0 с помощью saxon s9api? 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. Могу ли я просто заменить «html» на «xml»? –

+0

Также он дает мне следующую ошибку: должен быть указан исходный документ, исходный шаблон или начальная функция. Разве это не то, что я сделал в первой попытке? –

+0

Вы также должны установить начальный контекстный узел на вашем трансформаторе. Ваш вызов builder.build() должен вернуть XdmNode. Задайте локальную переменную с помощью XdmNode (скажем, источник), а затем установите начальный контекст на трансформаторе transformer.setInitialContextNode (source). –

 Смежные вопросы

  • Нет связанных вопросов^_^