首页 > 代码库 > JAVA增删改查XML文件

JAVA增删改查XML文件

  最近总是需要进行xml的相关操作。

  不免的要进行xml的读取修改等,于是上网搜索,加上自己的小改动,整合了下xml的常用操作。

  读取XML配置文件

  首先我们需要通过DocumentBuilderFactory获取xml文件的工厂实例。

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();        dbf.setIgnoringElementContentWhitespace(true);

  创建文档对象

1 DocumentBuilder db = dbf.newDocumentBuilder();2             Document doc = db.parse(xmlPath); // 使用dom解析xml文件

  最后遍历列表,进行数据提取

 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             }

  全部代码

 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 =http://www.mamicode.com/ node.getFirstChild().getNodeValue();  17                         System.out.println(name+" : "+value);18                     }  19                 }  20             }21         } catch (Exception e) {22             e.printStackTrace();23         }24     }
View Code

  在XML文件中增加节点

  差不多同样的步骤,先获取根节点,创建一个新的节点,向其中添加元素信息,最后把这个新节点添加到根节点中

 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);

  最后不要忘记保存新增的文件,对源文件进行覆盖。

1 TransformerFactory factory = TransformerFactory.newInstance();2             Transformer former = factory.newTransformer();3             former.transform(new DOMSource(xmldoc), new StreamResult(new File(xmlPath)));

  全部代码:

 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来获取目标节点

 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 =http://www.mamicode.com/ 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

运行结果: