VVL1295

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

四种方式操作XML文件

 

1,使用DOM,即Java原生API进行操作;

在Java DOM中,xml文件中的所有事物都是node,即所有事物都是node的子孙类,包括:document,node,attribute,text;

在操作XML文件前,通常先取得其根节点;

以下为用DOM API遍历XML文件的代码;

public class Test1 {

	public static void main(String[] args) throws Exception {
		File file = new File("E:" + File.separator + "test.xml");
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse(file);

		StringBuilder stringBuilder = new StringBuilder();
		// 取得根节点
		Element root = document.getDocumentElement();
		System.out.println(ergodicXML((Node) root, stringBuilder));
	}

	// 递归遍历XML文件
	public static StringBuilder ergodicXML(Node node, StringBuilder builder) {
		NodeList list = node.getChildNodes();// 注意,得到的子节点里面有空格,因为DOM API认为XML文件中的标签之间的空格也会被认为是子节点。
		if (list.getLength() == 0) {
				return builder.append(node.getTextContent() + "\n");
		} else {
			for (int i = 0; i < list.getLength(); i++) {
				ergodicXML(list.item(i), builder);
			}
			return builder;
		}
	}

}

 2,用DOM4J操作XML文件

DOM4J可以解析XML文本和XML文件;

String XMLString = "<?xml version='1.0' encoding='UTF-8'?><name><>";
		Document document2 = DocumentHelper.parseText(XMLString);

 用DOM4J把XML文件遍历;

 

public class Test2 {
	public static void main(String[] args) throws Exception{
		
		File file = new File("E:"+ File.separator +"test.xml");
		SAXReader reader = new SAXReader();
		
		StringBuilder builder = new StringBuilder();
		Document document = reader.read(file);
		Element root = document.getRootElement();
		System.out.println(ergodicXML(root, builder));
	}

	// 递归遍历XML文件,拼接builder,返回全部文本数据
	public static StringBuilder ergodicXML(Element element , StringBuilder builder){
		List<Element> list = element.elements();
		if(list.size() == 0){
			return builder.append(element.getText()+"\n");//每个标签的文本数据独占一行
		}else {
			Iterator<Element> iterator = element.elementIterator();
			while (iterator.hasNext()){
				Element element2 = iterator.next();
				ergodicXML(element2, builder);
			}
			return builder;
		}
	}
}

 3、用DOM生成XML对象,并写入到指定路径的文件

public class Test4 {

	public static void main(String[] args) throws Exception {
		// 创建XML对象
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.newDocument();
		// 创基根节点
		Element root = document.createElement("persons");
		document.appendChild(root);
		// 创建第一个节点
		Element element1 = document.createElement("vv");
		element1.setAttribute("ID", "01");
		root.appendChild(element1);
		// 创建第一个节点的子节点
		Element element1_1 = document.createElement("age");
		element1_1.setTextContent("22");
		element1.appendChild(element1_1);
		
		/*
		 * 把XML对象写入到指定路径的文件
		 */
		// DOM文档作为输出源
		DOMSource source = new DOMSource(document);
		// 文件作为输入源
		File file = new File("test.xml");
		BufferedWriter writer = new BufferedWriter(new PrintWriter(new OutputStreamWriter(new FileOutputStream(file))));
		StreamResult result = new StreamResult(writer);
		// 创建transfomer,进行设置,进行写入
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
		transformer.setOutputProperty(OutputKeys.INDENT, "yes");
		transformer.transform(source, result);
		//关闭输出流
		writer.close();
	}

}

 

posted on 2015-08-06 10:02  bobo2018  阅读(292)  评论(0)    收藏  举报