在java代码中用xslt处理xml文件

java处理xml文件

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLDecoder;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.DocumentResult;
import org.dom4j.io.DocumentSource;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;


public class Jom4jForXmltoXslt {
    
    /**
     * 利用xslt文件转换xml
     * @author Administrator
     * @parame document,styleSheet
     */
    public static Document transformDocument(Document document,File styleSheet)
    throws TransformerException {
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer(new StreamSource(styleSheet));

        DocumentSource source = new DocumentSource(document);
        DocumentResult result = new DocumentResult();
        transformer.transform(source, result);

        Document transformedDoc = result.getDocument();

        return transformedDoc;
    }
    
    /**
     * 读取需要转换的xml文件
     * @return Document
     * @throws UnsupportedEncodingException
     * @throws FileNotFoundException
     */
    public Document getRoleXML() throws UnsupportedEncodingException, FileNotFoundException {
        InputStream is=null;
        URL url=this.getClass().getClassLoader().getResource("resources.xml");
        if(url==null) return null;
        String path = url.getFile();
        path = URLDecoder.decode(path,"UTF-8");
        is = new FileInputStream(new File(path));
        System.out.println("读到的menuConfig.xml位置在:"+path);
        SAXReader reader = new SAXReader();

        try {
            return reader.read(is);
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }
    
    public static void main(String args[]) throws IOException {
        try {
            
            Document doc = new Jom4jForXmltoXslt().getRoleXML();
            Document resultDoc = Jom4jForXmltoXslt.transformDocument(doc, new File("transfer-menu-before.xslt"));

            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("GBK");

            XMLWriter writer = new XMLWriter(new FileWriter(new File("output.xml")),format);
            writer.write(resultDoc);
            writer.close();
            System.out.println("用xslt转换xml文件成功!");


        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
}
原文地址:https://www.cnblogs.com/rinack/p/9049442.html