首先您需要建立三个文件夹:
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);
}
}