0311作业

主代码

 1 package com.kgc.lx.xml.lx01;
 2 
 3 public class Test {
 4     public static void main(String[] args){
 5         DOMDemo dom=new DOMDemo();
 6         dom.dom();
 7        // dom.show();
 8      //   dom.add();
 9         dom.mod();
10       //  dom.del();
11         dom.show();
12 
13     }
14 }

  1 package com.kgc.lx.xml.lx01;
  2 
  3 import org.w3c.dom.Document;
  4 import org.w3c.dom.Element;
  5 import org.w3c.dom.Node;
  6 import org.w3c.dom.NodeList;
  7 import org.xml.sax.SAXException;
  8 
  9 import javax.xml.parsers.DocumentBuilder;
 10 import javax.xml.parsers.DocumentBuilderFactory;
 11 import javax.xml.parsers.ParserConfigurationException;
 12 import javax.xml.transform.*;
 13 import javax.xml.transform.dom.DOMSource;
 14 import javax.xml.transform.stream.StreamResult;
 15 import java.io.FileNotFoundException;
 16 import java.io.FileOutputStream;
 17 import java.io.IOException;
 18 
 19 public class DOMDemo {
 20     //创建Ducument对象
 21     private Document dou=null;
 22     String dizhi="c:\\idea\\kkkk\\src\\com\\kgc\\lx\\xml\\lx01\\Student.xml";
 23 
 24     public void dom(){
 25         //获得解析器工厂
 26         DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
 27 
 28         try {
 29             //根据解析器工厂获得解析器
 30             DocumentBuilder db = dbf.newDocumentBuilder();
 31             //解析器来解析XML文件来获得Ducument对象
 32             dou=db.parse(dizhi);
 33 
 34         } catch (ParserConfigurationException e) {
 35             e.printStackTrace();
 36         } catch (SAXException e) {
 37             e.printStackTrace();
 38         } catch (IOException e) {
 39             e.printStackTrace();
 40         }
 41     }
 42 
 43     public void show(){
 44         //以Document做起点,找到所有的Brand节点
 45         NodeList brands=dou.getElementsByTagName("Brand");
 46         for (int i=0;i<brands.getLength();i++){
 47             //遍历brands,拿出每一个节点,并强制转换元素类型
 48             Element eleBrand =(Element)brands.item(i);
 49             System.out.println("品牌:"+eleBrand.getAttribute("name"));
 50 
 51             //继续查找, 找到当前brand的所有子节点出来
 52             NodeList types=eleBrand.getChildNodes();
 53             //遍历每一个子节点
 54             for (int j=0;j<types.getLength();j++){
 55                 Node typeNode=types.item(j);
 56                 //判断当前节点类型是否为元素节点
 57                 if (typeNode.getNodeType()==Node.ELEMENT_NODE){
 58                     //如果是元素节点,才转换成元素对象
 59                     Element eleType=(Element)typeNode;
 60                     System.out.println("\t型号:"+eleType.getAttribute("name"));
 61                 }
 62             }
 63         }
 64         
 65     }
 66 
 67     //增加元素
 68     public void add(){
 69         //增加brand元素
 70         Element brand=dou.createElement("Brand");
 71         //<Brand name="三星">
 72         brand.setAttribute("name","三星");
 73         //增加Type元素
 74         Element type=dou.createElement("Type");
 75         //<Type name="sx1111">
 76         type.setAttribute("name","sx1111");
 77 
 78         //将type作为Brand的子元素
 79         brand.appendChild(type);
 80         //将Brand放到Shouji元素中
 81         //以Document做起点,找到Shouji元素节点,通过此节点,将brand作为Shouji的子元素
 82         dou.getElementsByTagName("Shouji").item(0).appendChild(brand);
 83 
 84         save(dizhi);
 85     }
 86     //保存xml文件,文件保存的地址
 87     //需要借助转换器,借助输出流保存文件
 88     public void save(String dizhi){
 89         //获取转换器工厂
 90         TransformerFactory tff=TransformerFactory.newInstance();
 91         //设置缩进,4个空格????
 92        // tff.setAttribute("indent-number",8);
 93         try {
 94             //转换器
 95             Transformer tf=tff.newTransformer();
 96             //打开转换格式开关
 97             tf.setOutputProperty(OutputKeys.INDENT,"YES");
 98             //源--->目的地(Ducument对象)
 99             DOMSource source=new DOMSource(dou);
100             //通过字节输出流保存文件
101             FileOutputStream fos=new FileOutputStream(dizhi);
102             //?-?
103             StreamResult result=new StreamResult(fos);
104             tf.transform(source,result);
105 
106         } catch (TransformerConfigurationException e) {
107             e.printStackTrace();
108         } catch (FileNotFoundException e) {
109             e.printStackTrace();
110         } catch (TransformerException e) {
111             e.printStackTrace();
112         }
113     }
114 
115     //修改元素
116     public void mod(){
117         //获取所有的Brand元素节点
118         NodeList brands=dou.getElementsByTagName("Brand");
119         for (int i=0;i<brands.getLength();i++){
120             Element eleBrand=(Element)brands.item(i);
121             eleBrand.setAttribute("id",i+"");
122         }
123         //保存
124         save(dizhi);
125     }
126 
127     //删除元素
128     public void del(){
129         //遍历所有Brand
130         NodeList brand=dou.getElementsByTagName("Brand");
131         for (int i=0;i<brand.getLength();i++){
132             Element eleBrand=(Element)brand.item(i);
133 
134             //判断要删除的元素
135             if (eleBrand.getAttribute("name").equals("三星")){
136                 eleBrand.getParentNode().removeChild(eleBrand);
137             }
138         }
139         save(dizhi);
140     }
141 
142 
143 }

 1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 2 <Shouji>
 3     <Brand id="0" name="华为">
 4         <Type name="hw1111"/>
 5         <Type name="hw2222"/>
 6         <Type name="hw3333"/>
 7     </Brand>
 8     <Brand id="1" name="苹果">
 9         <Type name="pg1111"/>
10         <Type name="pg2222"/>
11         <Type name="pg3333"/>
12     </Brand>
13 
14 
15 
16 
17 
18 </Shouji>

 

运行结果

 

posted @ 2019-03-11 21:14  纯属丶简单  阅读(196)  评论(0编辑  收藏  举报