JAVA增刪改查XML文件

  最近老是須要進行xml的相關操做。java

  難免的要進行xml的讀取修改等,因而上網搜索,加上本身的小改動,整合了下xml的經常使用操做。node

  讀取XML配置文件

  首先咱們須要經過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     }
View Code

  在XML文件中增長節點

  差很少一樣的步驟,先獲取根節點,建立一個新的節點,向其中添加元素信息,最後把這個新節點添加到根節點中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     }
View Code

  在XML中修改節點信息

  經過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     }
View Code

  刪除XML中的節點

  經過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文件。

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>

xmlManage.java

 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 }
View Code

運行結果:

相關文章
相關標籤/搜索