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>
运行结果