java 使用org.w3c.dom操作XML文件

2 篇文章 0 订阅

本篇介绍在java中,如何使用org.w3c.dom中的相关内容来操作XML文件。包括:

  • 如何在内存中构建XML文件并写入磁盘;
  • 如何从磁盘读取XML文件到内存;
  • 如何添加注释,读取注释;
  • 如何添加属性,读取属性;
  • 如何添加子元素,读取子元素;
也可以参考如下连接:
  1. http://www.cnblogs.com/ITEagle/archive/2010/03/03/1677431.html
下面直接贴出样例代码:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class XMLSample{
	private static void writeXML(Document document, String filePath) {

		TransformerFactory transFactory = TransformerFactory.newInstance();
		Transformer transformer = null;
		try {
			String parent = new File(filePath).getParent();
			File pDir = new File(parent);
			if (!pDir.exists()) {
				pDir.mkdirs();
			}
			OutputStream os = new FileOutputStream(new File(filePath));
			transformer = transFactory.newTransformer();
			transformer.setOutputProperty(OutputKeys.INDENT, "yes");
			transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
			DOMSource source = new DOMSource();
			source.setNode(document);
			StreamResult result = new StreamResult();
			result.setOutputStream(os);
			transformer.transform(source, result);
			os.flush();
		} catch (TransformerConfigurationException e) {
			e.printStackTrace();
		} catch (TransformerException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private static Document readXML(String file) {

		try {
            // 得到DOM解析器的工厂实例
			DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            // 从DOM工厂中获得DOM解析器
			DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();
            // 把要解析的xml文档读入DOM解析器
			Document doc = dbBuilder.parse(file);
			return doc;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void showXMLDetail() {

		Document document = readXML(mapperFilePath);
        // 获取标签名为"dataset"的元素
		Node mapper = document.getElementsByTagName("dataset").item(0);

        // 下面依次读取dataset元素的每个子元素,每个子元素的标签名字为node
		for (int i = 0; i < mapper.getChildNodes().getLength(); i++) {
			Node node = mapper.getChildNodes().item(i);
			String s = item.getNodeName();
			if(s.toLowerCase().equals("#comment")){
				System.out.println("这是注释内容: "+node.getTextContent());
			}else if(s.toLowerCase().equals("#text")){
				System.out.println("呐,这是标签之外的文本: "+node.getTextContent());
			}else if ("node".equals(s)) {
				// 获取元素属性的值
				String column = item.getAttributes().getNamedItem("column").getNodeValue();
				String field = item.getAttributes().getNamedItem("property").getNodeValue();
			}else{
				// 其他的就不要了
			}
			

		}

	}

	public static void generateXML(){
		try {
			Element root;
			Set<String> set = new HashSet<>();
			set.add("node");
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			factory.setNamespaceAware(true);
			DocumentBuilder documentBuilder = null;
			documentBuilder = factory.newDocumentBuilder();
			Document document = documentBuilder.newDocument();
			root = document.createElement("dataset");
			document.appendChild(root);
			set.forEach(p -> {
				Element element = document.createElement(p);
				element.setAttribte("column","haha");
				element.setAttribte("property","heihei");
				root.appendChild(element);
			});
			writeXML(document, "d:/allTables.xml");
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值