首页 > 代码库 > 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 }
在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 }
在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 }
删除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 }
运行结果:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。