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

来源:互联网 发布:云计算产业价值链 编辑:程序博客网 时间:2024/05/17 04:30

本篇介绍在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元素的每个子元素,每个子元素的标签名字为nodefor (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();}}}


1 0
原创粉丝点击