Java使用xsl文件对xml文件进行转换

首先您需要建立三个文件夹:

1.一个存放原始xml文件的文件夹(存放未转换过的文件):D:/Mywork/fromxml

2.一个存放存放xsl文件的文件夹(存放转换文件):D:/Mywork/xls/

3.一个存放转换后的文件的文件夹:D:/Mywork/toxml

注意:在Linux系统中和window系统中文件夹的分隔符不一样;Linux系统中用的是“/”,但是win中用的是“\”,在Java中“/”在两个系统中都可以用;这里我使用“/”’

一、创建实体类Content

/**
* @author zhangzihao
* @version 创建时间:2019年7月16日 上午10:55:36
* 类说明:用来记录文件的内容和文件的源头和转换文件
*/
public class Content {
	private String formUrl;//源文件地址
	private String tranformUrl;//转换文件地址
	private String toContent;//转换后的内容
	public String getFormUrl() {
		return formUrl;
	}
	public void setFormUrl(String formUrl) {
		this.formUrl = formUrl;
	}
	public String getTranformUrl() {
		return tranformUrl;
	}
	public void setTranformUrl(String tranformUrl) {
		this.tranformUrl = tranformUrl;
	}
	public String getToContent() {
		return toContent;
	}
	public void setToContent(String toContent) {
		this.toContent = toContent;
	}
}

 二、创建工具类进行转换



import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileWriter;

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

/**
* @author zhangzihao
* @version 创建时间:2019年7月16日 上午10:00:19
* 类说明:
*/
public class XSLT_XML {
	/**
	 * 转换文件
	 * @param xslFilePath :转换文件的地址
	 * @param xmlfiles:需要转换的源文件地址
	 * @return
	 */
	public static Content[] ExecuteXSL(String xslFilePath,String[] xmlfiles) {
		try {
			Content[] contents = new Content[xmlfiles.length];
			int i = 0;
			for (String xmlfile : xmlfiles) {
				ByteArrayOutputStream byteRep = new ByteArrayOutputStream();
				TransformerFactory transformerFactory = TransformerFactory
						.newInstance();
				StreamSource source = new StreamSource(xmlfile);
				StreamResult result = new StreamResult(byteRep);
				StreamSource style = new StreamSource(xslFilePath);
				Transformer transformer = transformerFactory
						.newTransformer(style);
				transformer.setOutputProperty(
						javax.xml.transform.OutputKeys.ENCODING, "utf-8"); 
				transformer.transform(source, result);
				Content content = new Content();
				content.setFormUrl(xmlfile);
				content.setToContent(byteRep.toString());
				content.setTranformUrl(xslFilePath);
				contents[i] = content;
				i++;
			}
			return contents;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
 
	}

	/**
	 * 获取指定路径下的xml文件
	 * @param path
	 * @return
	 */
	public static String[] getXmlFilePath(String path) {
		File file = new File(path);
		File files[] = file.listFiles();
		String filename = "";
		String[] filepath = new String[files.length];
		for (int i = 0; i < files.length; i++) {
			File f = files[i];
			filename = f.getName();
			if (filename.indexOf("xml") != -1) {
				filepath[i] = path+"/"+filename;
			}
		}
		return filepath;
	}
 
	/**
	 * 将内容写入指定的文件夹中
	 * @param folderUrl
	 * @param contents
	 */
	public static void createFile(String folderUrl,Content[] contents) {
		try {
			for (int i = 0; i < contents.length; i++) {
				String formUrl = contents[i].getFormUrl();
				String tranformUrl = contents[i].getTranformUrl();
				
				String fileName = "FROM_"+formUrl.substring(formUrl.lastIndexOf("/")+1,formUrl.lastIndexOf("."))
						+"_TRAN_"+tranformUrl.substring(tranformUrl.lastIndexOf("/")+1,tranformUrl.lastIndexOf("."))
						;
				File newFile = new File(folderUrl+"/" + fileName+".xml");
				System.out.println(newFile);
				if (!newFile.exists()) {
					newFile.createNewFile();
				}
				FileWriter fw = new FileWriter(newFile);
				fw.write(contents[i].getToContent());
				fw.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
 
	}
 
	public static void main(String args[]) {
		//1.获取将要转换的源文件
		String[] fromxmls_url = getXmlFilePath("D:/Mywork/fromxml");
		//2.转换
		Content contents[] = ExecuteXSL("D:/Mywork/xls/ordership.xsl",fromxmls_url);
//		for (String content : contents) {
//			System.out.println(content);
//		}
		//3.生成文件到指定目录
		createFile("D:/Mywork/toxml",contents);
	}
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值