疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

使用DOM操作XML


 

Dom解析
 
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <person>
 3     <chinese id="001" type="young people">
 4         <name>小黎</name>
 5         <age>18</age>
 6         <gender>男</gender>
 7     </chinese>
 8     <chinese id="002" type="middle people">
 9         <name>leo</name>    
10         <age>20</age>
11         <gender>男</gender>
12     </chinese>
13     <chinese id="003" type="old people">
14         <name>chichy</name>    
15         <age>23</age>
16         <gender>女</gender>
17     </chinese>
18 </person>
 
XML的CURD操作
 
需要操作XML的时候必须先:
 
 
 1     /**
 2      * 获得Document
 3      */
 4     public static Document getDocument() throws Exception
 5     {
 6         //获得解析器工厂
 7         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 8         //获得解析器
 9         DocumentBuilder builder = factory.newDocumentBuilder();
10         //获得Document解析XML文档
11         Document document = builder.parse("src/操作XML/person.xml");
12         return document;
13     }
 
创建(Create)
 
 
 1     /**
 2      * Create
 3      * @param document
 4      */
 5     public static void addXML(Document document)
 6     {
 7         //获得根元素
 8         Element element = document.getDocumentElement();
 9         //创建chinese元素
10         Element newElement = document.createElement("chinese");
11         //在根元素下添加chinese元素
12         element.appendChild(newElement);
13         //给根元素创建属性
14         element.setAttribute("type", "pepole");
15     }
 
更新(Update)
 
 
 1 /**
 2      * Update
 3      */
 4     public static void updateXML(Document document)
 5     {
 6         //获取所有chinese节点
 7         NodeList nodeList = document.getElementsByTagName("chinese");
 8         for (int i = 0; i < nodeList.getLength(); i++) {
 9             //获得每一个节点
10             Node node = nodeList.item(i);
11             //获得元素
12             Element elment = (Element)node;
13             //获得指定id属性的值
14             String id = elment.getAttribute("id");
15             if("001".equals(id))
16             {
17                 //获得所有name元素
18                 NodeList tagList = elment.getElementsByTagName("name");
19                 //获得唯一一个name
20                 Node nodeName = tagList.item(0);
21                 //修改name元素里的值
22                 nodeName.setTextContent("黎");
23             }
24         }
25     }
 
读取(Read)
 
 
 1     /**
 2      * Read
 3      */
 4     public static void readXML() throws Exception
 5     {
 6         String result="";//返回的结果
 7         String id="";
 8         String name="";
 9         String age="";
10         String gender="";
11         //获得Document解析XML文档
12         Document document=getDocument();
13         //获得所有chinese节点
14         NodeList nodeList = document.getElementsByTagName("chinese");
15         //遍历 所有chinese节点
16         for (int i = 0; i < nodeList.getLength(); i++) {
17             //获得每一个节点
18             Node node = nodeList.item(i);
19             //获得每个节点的所有属性
20             node.getAttributes();
21             //获得元素
22             Element element = (Element)node;
23             //获得chinese节点指定id属性的值
24             id = element.getAttribute("id");
25             //获得chinese下的所有节点
26             NodeList childList = node.getChildNodes();
27             //遍历所有子元素
28             for (int j = 0; j < childList.getLength(); j++) {
29                 //获得chinese下的每一个子节点
30                 Node childNode = childList.item(j);
31                 //获得子节点名称
32                 String childName=childNode.getNodeName();
33                 //判断是否对应的子节点
34                 if("name".equals(childName))
35                 {
36                     //获得子节点的值
37                     name=childNode.getTextContent();
38                 }
39                 if("age".equals(childName))
40                 {
41                     age=childNode.getTextContent();
42                 }
43                 if("gender".equals(childName))
44                 {
45                     gender=childNode.getTextContent();
46                 }
47             }
48             result=result+"ID:"+id+",姓名:"+name+",年龄"+age+",性别:"+gender+" ";
49         }
50     }
 
删除(Delete)操作
 
 1 /**
 2      * Delete
 3      */
 4     public static void deleteXML(Document document)
 5     {
 6         //获取所有chinese节点
 7         NodeList nodeList = document.getElementsByTagName("chinese");
 8         for (int i = 0; i < nodeList.getLength(); i++) {
 9             //获得每一个节点
10             Node node = nodeList.item(i);
11             //获得元素
12             Element element = (Element)node;
13             //获得指定id属性的值
14             String id = element.getAttribute("id");
15             if("001".equals(id))
16             {
17                 //获得chinese下的所有子节点
18                 NodeList childList = element.getChildNodes();
19                 //遍历所有子节点
20                 for (int j = 0; j < childList.getLength(); j++) {
21                     //获得子节点
22                     Node childNode =childList.item(j) ;
23                     if("name".equals(childNode.getNodeName()))
24                     {
25                         //获得元素
26                         Element childElement = (Element)childNode;
27                         //获得子节点的父节点
28                         Node pareNode =  childNode.getParentNode();
29                         //删除子节点
30                         pareNode.removeChild(childElement);
31                     }
32                 }
33             }
34         }
35     }
 
 操作完了后必须保存:
 
 
 1     /**
 2      * 保存XML
 3      */
 4     public static void saveXML(Document document) throws Exception
 5     {
 6 
 7         //获得持久化对象工厂
 8         TransformerFactory factory = TransformerFactory.newInstance();
 9         //获得持久化对象
10         Transformer transFormer = factory.newTransformer();
11         //将document封装到source中
12         Source xmlSource = new DOMSource(document);
13         //将文件路径封装到Result
14         Result outputTarget = new StreamResult("src/操作XML/person.xml");
15         transFormer.transform(xmlSource, outputTarget);
16     }