最近老是須要進行xml的相關操做。java
難免的要進行xml的讀取修改等,因而上網搜索,加上本身的小改動,整合了下xml的經常使用操做。node
首先咱們須要經過DocumentBuilderFactory獲取xml文件的工廠實例。express
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); dbf.setIgnoringElementContentWhitespace(true);
建立文檔對象app
1 DocumentBuilder db = dbf.newDocumentBuilder(); 2 Document doc = db.parse(xmlPath); // 使用dom解析xml文件
最後遍歷列表,進行數據提取dom
1 NodeList sonlist = doc.getElementsByTagName("son"); 2 for (int i = 0; i < sonlist.getLength(); i++) // 循環處理對象 3 { 4 Element son = (Element)sonlist.item(i);; 5 6 for (Node node = son.getFirstChild(); node != null; node = node.getNextSibling()){ 7 if (node.getNodeType() == Node.ELEMENT_NODE){ 8 String name = node.getNodeName(); 9 String value = node.getFirstChild().getNodeValue(); 10 System.out.println(name+" : "+value); 11 } 12 } 13 }
所有代碼ide
1 public static void getFamilyMemebers(){ 2 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); 3 dbf.setIgnoringElementContentWhitespace(true); 4 try { 5 DocumentBuilder db = dbf.newDocumentBuilder(); 6 Document doc = db.parse(xmlPath); // 使用dom解析xml文件 7 8 NodeList sonlist = doc.getElementsByTagName("son"); 9 for (int i = 0; i < sonlist.getLength(); i++) // 循環處理對象 10 { 11 Element son = (Element)sonlist.item(i);; 12 13 for (Node node = son.getFirstChild(); node != null; node = node.getNextSibling()){ 14 if (node.getNodeType() == Node.ELEMENT_NODE){ 15 String name = node.getNodeName(); 16 String value = node.getFirstChild().getNodeValue(); 17 System.out.println(name+" : "+value); 18 } 19 } 20 } 21 } catch (Exception e) { 22 e.printStackTrace(); 23 } 24 }
差很少一樣的步驟,先獲取根節點,建立一個新的節點,向其中添加元素信息,最後把這個新節點添加到根節點中ui
1 Element root = xmldoc.getDocumentElement(); 2 3 //刪除指定節點 4 5 Element son =xmldoc.createElement("son"); 6 son.setAttribute("id", "004"); 7 8 Element name = xmldoc.createElement("name"); 9 name.setTextContent("小兒子"); 10 son.appendChild(name); 11 12 Element age = xmldoc.createElement("name"); 13 age.setTextContent("0"); 14 son.appendChild(age); 15 16 root.appendChild(son);
最後不要忘記保存新增的文件,對源文件進行覆蓋。lua
1 TransformerFactory factory = TransformerFactory.newInstance(); 2 Transformer former = factory.newTransformer(); 3 former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
所有代碼:spa
1 public static void createSon() { 2 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); 3 dbf.setIgnoringElementContentWhitespace(false); 4 5 try{ 6 7 DocumentBuilder db=dbf.newDocumentBuilder(); 8 Document xmldoc=db.parse(xmlPath); 9 10 Element root = xmldoc.getDocumentElement(); 11 12 //刪除指定節點 13 14 Element son =xmldoc.createElement("son"); 15 son.setAttribute("id", "004"); 16 17 Element name = xmldoc.createElement("name"); 18 name.setTextContent("小兒子"); 19 son.appendChild(name); 20 21 Element age = xmldoc.createElement("name"); 22 age.setTextContent("0"); 23 son.appendChild(age); 24 25 root.appendChild(son); 26 //保存 27 TransformerFactory factory = TransformerFactory.newInstance(); 28 Transformer former = factory.newTransformer(); 29 former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath))); 30 31 }catch(Exception e){ 32 e.printStackTrace(); 33 } 34 }
經過XPath來獲取目標節點code
1 public static Node selectSingleNode(String express, Element source) { 2 Node result=null; 3 XPathFactory xpathFactory=XPathFactory.newInstance(); 4 XPath xpath=xpathFactory.newXPath(); 5 try { 6 result=(Node) xpath.evaluate(express, source, XPathConstants.NODE); 7 } catch (XPathExpressionException e) { 8 e.printStackTrace(); 9 } 10 11 return result; 12 }
獲取目標節點,進行修改,完成後,保存文件。
1 Element root = xmldoc.getDocumentElement(); 2 3 Element per =(Element) selectSingleNode("/father/son[@id='001']", root); 4 per.getElementsByTagName("age").item(0).setTextContent("27"); 5 6 TransformerFactory factory = TransformerFactory.newInstance(); 7 Transformer former = factory.newTransformer(); 8 former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
所有代碼:
1 public static void modifySon(){ 2 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); 3 dbf.setIgnoringElementContentWhitespace(true); 4 try{ 5 6 DocumentBuilder db=dbf.newDocumentBuilder(); 7 Document xmldoc=db.parse(xmlPath); 8 9 Element root = xmldoc.getDocumentElement(); 10 11 Element per =(Element) selectSingleNode("/father/son[@id='001']", root); 12 per.getElementsByTagName("age").item(0).setTextContent("27"); 13 14 TransformerFactory factory = TransformerFactory.newInstance(); 15 Transformer former = factory.newTransformer(); 16 former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath))); 17 }catch(Exception e){ 18 e.printStackTrace(); 19 } 20 }
經過XPath獲取目標節點, 進行刪除,最後保存
1 Element root = xmldoc.getDocumentElement(); 2 3 Element son =(Element) selectSingleNode("/father/son[@id='002']", root); 4 root.removeChild(son); 5 6 TransformerFactory factory = TransformerFactory.newInstance(); 7 Transformer former = factory.newTransformer(); 8 former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));
所有代碼:
1 public static void discardSon(){ 2 3 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); 4 dbf.setIgnoringElementContentWhitespace(true); 5 6 try{ 7 8 DocumentBuilder db=dbf.newDocumentBuilder(); 9 Document xmldoc=db.parse(xmlPath); 10 11 Element root = xmldoc.getDocumentElement(); 12 13 Element son =(Element) selectSingleNode("/father/son[@id='002']", root); 14 root.removeChild(son); 15 16 TransformerFactory factory = TransformerFactory.newInstance(); 17 Transformer former = factory.newTransformer(); 18 former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath))); 19 20 }catch(Exception e){ 21 e.printStackTrace(); 22 } 23 }
綜上,基本XML的操做就如此了。下面是整合全部的代碼,能夠直接運行的,前提是在src下本身配好Xml文件。
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?><father> 2 <son id="001"> 3 <name>老大</name> 4 <age>27</age> 5 </son> 6 <son id="002"> 7 <name>老二</name> 8 <age>13</age> 9 </son> 10 <son id="003"> 11 <name>老三</name> 12 <age>13</age> 13 </son> 14 </father>
1 package xmlManger; 2 3 import java.io.File; 4 5 import javax.xml.parsers.DocumentBuilder; 6 import javax.xml.parsers.DocumentBuilderFactory; 7 import javax.xml.transform.Transformer; 8 import javax.xml.transform.TransformerFactory; 9 import javax.xml.transform.dom.DOMSource; 10 import javax.xml.transform.stream.StreamResult; 11 import javax.xml.xpath.XPath; 12 import javax.xml.xpath.XPathConstants; 13 import javax.xml.xpath.XPathExpressionException; 14 import javax.xml.xpath.XPathFactory; 15 16 import org.w3c.dom.Document; 17 import org.w3c.dom.Element; 18 import org.w3c.dom.Node; 19 import org.w3c.dom.NodeList; 20 21 22 23 public class xmlManage { 24 25 private static String xmlPath = "E:\\Eclipse(Plugin)\\workspace\\xmlManger\\src\\family.xml"; 26 27 28 public static void getFamilyMemebers(){ 29 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); 30 dbf.setIgnoringElementContentWhitespace(true); 31 try { 32 DocumentBuilder db = dbf.newDocumentBuilder(); 33 Document doc = db.parse(xmlPath); // 使用dom解析xml文件 34 35 NodeList sonlist = doc.getElementsByTagName("son"); 36 for (int i = 0; i < sonlist.getLength(); i++) // 循環處理對象 37 { 38 Element son = (Element)sonlist.item(i);; 39 40 for (Node node = son.getFirstChild(); node != null; node = node.getNextSibling()){ 41 if (node.getNodeType() == Node.ELEMENT_NODE){ 42 String name = node.getNodeName(); 43 String value = node.getFirstChild().getNodeValue(); 44 System.out.println(name+" : "+value); 45 } 46 } 47 } 48 } catch (Exception e) { 49 e.printStackTrace(); 50 } 51 } 52 53 public static void modifySon(){ 54 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); 55 dbf.setIgnoringElementContentWhitespace(true); 56 try{ 57 58 DocumentBuilder db=dbf.newDocumentBuilder(); 59 Document xmldoc=db.parse(xmlPath); 60 61 Element root = xmldoc.getDocumentElement(); 62 63 Element per =(Element) selectSingleNode("/father/son[@id='001']", root); 64 per.getElementsByTagName("age").item(0).setTextContent("27"); 65 66 TransformerFactory factory = TransformerFactory.newInstance(); 67 Transformer former = factory.newTransformer(); 68 former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath))); 69 }catch(Exception e){ 70 e.printStackTrace(); 71 } 72 } 73 74 public static void discardSon(){ 75 76 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); 77 dbf.setIgnoringElementContentWhitespace(true); 78 79 try{ 80 81 DocumentBuilder db=dbf.newDocumentBuilder(); 82 Document xmldoc=db.parse(xmlPath); 83 84 Element root = xmldoc.getDocumentElement(); 85 86 Element son =(Element) selectSingleNode("/father/son[@id='002']", root); 87 root.removeChild(son); 88 89 TransformerFactory factory = TransformerFactory.newInstance(); 90 Transformer former = factory.newTransformer(); 91 former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath))); 92 93 }catch(Exception e){ 94 e.printStackTrace(); 95 } 96 } 97 98 public static void createSon() { 99 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); 100 dbf.setIgnoringElementContentWhitespace(false); 101 102 try{ 103 104 DocumentBuilder db=dbf.newDocumentBuilder(); 105 Document xmldoc=db.parse(xmlPath); 106 107 Element root = xmldoc.getDocumentElement(); 108 109 //刪除指定節點 110 111 Element son =xmldoc.createElement("son"); 112 son.setAttribute("id", "004"); 113 114 Element name = xmldoc.createElement("name"); 115 name.setTextContent("小兒子"); 116 son.appendChild(name); 117 118 Element age = xmldoc.createElement("name"); 119 age.setTextContent("0"); 120 son.appendChild(age); 121 122 root.appendChild(son); 123 //保存 124 TransformerFactory factory = TransformerFactory.newInstance(); 125 Transformer former = factory.newTransformer(); 126 former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath))); 127 128 }catch(Exception e){ 129 e.printStackTrace(); 130 } 131 } 132 133 public static Node selectSingleNode(String express, Element source) { 134 Node result=null; 135 XPathFactory xpathFactory=XPathFactory.newInstance(); 136 XPath xpath=xpathFactory.newXPath(); 137 try { 138 result=(Node) xpath.evaluate(express, source, XPathConstants.NODE); 139 } catch (XPathExpressionException e) { 140 e.printStackTrace(); 141 } 142 143 return result; 144 } 145 146 public static void main(String[] args){ 147 getFamilyMemebers(); 148 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); 149 modifySon(); 150 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); 151 getFamilyMemebers(); 152 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); 153 discardSon(); 154 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); 155 getFamilyMemebers(); 156 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); 157 createSon(); 158 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); 159 getFamilyMemebers(); 160 } 161 }