java按照目标格式利用Dom4j生成XML

通过Dom4J生成xml,生成了xml之后,去掉声明部分,然后用循环进行批量生成。

实现代码如下(需要dom4j,IOUtils的jar包):


package testXML;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Random;
import org.apache.commons.io.IOUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

/**
 * 类描述:生成测试xml文件
 * @author: 张宇
 * @date: 日期: 2018年7月26日 时间: 下午3:36:48
 * @version 1.0
 */
public class CreateXmlFile {
	@Test
	public void fun() throws Exception {
		long startTime = System.currentTimeMillis();
		for (int i = 1; i <= 10; i++) {

			String filePath = "D:\\测试文件\\选择题混合\\10答题点\\"
					+ "CH_" + i + ".pyk";
			// String filePath = "D:\\test2.xml";
			File file = new File(filePath);
			if(!file.exists()){
				createXML(file, i);
				modifyXmlFiles(file);
			}			
		}
		long endTime = System.currentTimeMillis();
		System.out.println("写入xml文件完成!");
		System.out.println("程序总共执行了:" + (endTime - startTime)+"毫秒");
	}

	// 删除文件中的第一行空白数据
	private void modifyXmlFiles(File file) throws FileNotFoundException,
			IOException {
		// TODO Auto-generated method stub
		FileInputStream fis = new FileInputStream(file);
		List<String> list = IOUtils.readLines(fis);
		fis.close();
		if (file.exists()) {
			file.delete();
		}

		for (int i = 0; i < list.size(); i++) {
			if (list.get(i).trim().equals("")) {
			} else {
				IOUtils.write(list.get(i) + "\r\n", new FileOutputStream(file,
						true));
			}
		}
	}

	/**
	 * DOM4J方式创建xml文件
	 * @param file
	 * @throws Exception
	 */
	public void createXML(File file, int i) throws Exception {
		Document document = DocumentHelper.createDocument();

		Element root = document.addElement("resourceID_label");
		// document.getRootElement().asXML();
		Element resourceID = root.addElement("resourceID");
		String textString = "CH_" + i;
		resourceID.setText(textString);

		Element question_type = root.addElement("question_type");
		question_type.setText("1");

		Element serial_number_label = root.addElement("serial_number_label");

		Element answer = serial_number_label.addElement("answer");
		String randomString = pickRandom();
		answer.setText(randomString);

		Element score = serial_number_label.addElement("score");
		score.setText("2");

		Element people_number = serial_number_label.addElement("people_number");
		people_number.setText("0");

		Element comment = serial_number_label.addElement("comment");
		comment.setText("正确答案1");
		OutputFormat format = OutputFormat.createPrettyPrint();
		//format.setNewLineAfterDeclaration(false);
		// format.setNewlines(true);
		// format.setTrimText(true);
		// 将XML内容写入到文件当中
		XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
		writer.setEscapeText(false);// 字符是否转义,默认true
		// 如果是需要默认头部,那么就是
		// Writer(document);
		// 如果不需要默认头部;
		// System.out.println(document.getRootElement().asXML());
		writer.write(document.getRootElement());
		writer.close();
	}

	// 获取一个数组中任意的一个元素
	private String pickRandom() {
		String[] array = { "A", "B", "C", "D" };
		int length = array.length;
		Random random = new Random();
		return array[random.nextInt(length)];
	}
}

运行结果:

写入xml文件完成!
程序总共执行了:84毫秒

整个代码的步骤:

1.按照要求生成XML文档,去掉申明的一部分(有个第一行空行问题没有解决)

2.读取生成的XML文档,然后去掉第一行空行

3.然后保存没有空行的xml到文件当中,得到需要的文档

猜你喜欢

转载自blog.csdn.net/zy345293721/article/details/81222184
今日推荐