一、代碼:
public class XmlUtil {/** * 將XML檔案輸出到指定的路徑 * * @param doc * @param fileName * @throws Exception */public static void outputXml(Document doc, String fileName)throws Exception {TransformerFactory tf = TransformerFactory.newInstance();Transformer transformer = tf.newTransformer();DOMSource source = new DOMSource(doc);transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");transformer.setOutputProperty(OutputKeys.INDENT, "yes");PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));StreamResult result = new StreamResult(pw);transformer.transform(source, result);System.out.println("產生XML檔案成功!");}/** * 產生XML * * @param ip * @return */public static Document generateXml(String ip) {Document doc = null;Element root = null;try {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();doc = builder.newDocument();root = doc.createElement("errorDevices");doc.appendChild(root);} catch (Exception e) {e.printStackTrace();return null;// 如果出現異常,則不再往下執行}Element element;element = doc.createElement("errorDevice");element.setAttribute("ip", ip);element.setAttribute("date",StringUtil.formatDate(new Date(), "yyyy-MM-dd hh:mm:ss"));element.setAttribute("status", "1");root.appendChild(element);return doc;}/** * 新增Xml節點 * * @param ip * @param fileName * @return * @throws FileNotFoundException * @throws TransformerException */public static void toWrite(String filename, String ip)throws FileNotFoundException, TransformerException {String date = StringUtil.formatDate(new Date(), "yyyy-MM-dd hh:mm:ss");DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = null;Document doc = null;try {builder = factory.newDocumentBuilder();doc = builder.parse(new File(filename));} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}NodeList links = doc.getElementsByTagName("errorDevice");if (links.getLength() > 0) {for (int i = 0; i < links.getLength(); i++) {Node nd = links.item(i);Node catParent = nd.getParentNode();Element ele = (Element) nd;String url = ele.getAttribute("ip");if (url.equals(ip)) {// ele.setAttribute("date", date);catParent.removeChild(nd);}}}Element element = doc.createElement("errorDevice");element.setAttribute("ip", ip);element.setAttribute("date",StringUtil.formatDate(new Date(), "yyyy-MM-dd hh:mm:ss"));element.setAttribute("status", "1");doc.getDocumentElement().appendChild(element);TransformerFactory tf = TransformerFactory.newInstance();Transformer transformer = tf.newTransformer();DOMSource source = new DOMSource(doc);transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");transformer.setOutputProperty(OutputKeys.INDENT, "yes");PrintWriter pw = new PrintWriter(new FileOutputStream(filename));StreamResult result = new StreamResult(pw);transformer.transform(source, result);System.out.println("新增XML節點成功!");}/** * 讀取XML * * @param filename * @return */public static List<Map> readXml(String filename){DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = null;Document doc = null;try {builder = factory.newDocumentBuilder();doc = builder.parse(new File(filename));} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}NodeList links = doc.getElementsByTagName("errorDevice");List<Map> list = new ArrayList<Map>();for(int i = 0; i< links.getLength() ; i ++){ Element node = (Element)links.item(i); Map map = new HashMap(); map.put(node.getAttribute("ip"), node.getAttribute("date")); list.add(map);}return list;}}
二、示範XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?><errorDevices><errorDevice date="2017-03-13 12:54:16" ip="20.100.156.42" status="1"/><errorDevice date="2017-03-13 12:54:56" ip="20.100.156.41" status="1"/></errorDevices>
三、最終效果圖
四、什麼是XML XML(可延伸標記語言 (XML)),出生於1998年,W3C出品,資料驅動,是一款不新潮但很實用的語言。