1 importjava.io.IOException;2
3 importjavax.xml.parsers.DocumentBuilder;4 importjavax.xml.parsers.DocumentBuilderFactory;5 importjavax.xml.parsers.ParserConfigurationException;6 importjavax.xml.transform.Transformer;7 importjavax.xml.transform.TransformerConfigurationException;8 importjavax.xml.transform.TransformerException;9 importjavax.xml.transform.TransformerFactory;10 importjavax.xml.transform.dom.DOMSource;11 importjavax.xml.transform.stream.StreamResult;12
13 importorg.w3c.dom.Document;14 importorg.w3c.dom.Element;15 importorg.w3c.dom.Node;16 importorg.w3c.dom.NodeList;17 importorg.xml.sax.SAXException;18
19 public classDOM {20
21 public static voidmain(String[] args) {22 //TODO Auto-generated method stub
23 try{24 DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();25 //创建DOM解析器工厂
26 DocumentBuilder db =dbf.newDocumentBuilder();27 //调用DOM解析器工厂的newDocumentBuilder()方法得到DOM解析器对象
28 Document doc = db.parse("src\\name.xml");29 //调用DOM解析器对象parse(String uri)方法得到Document对象
30 NodeList nl = doc.getElementsByTagName("name");31 //调用Document对象的getElementsByTagName(String tagname)方法得到NodeList对象
32 /*
33 * 遍历XML中的元素34 */
35 for (int i = 0; i < nl.getLength(); i++) {36 Node node =nl.item(i);37 //通过NodeList的item(int index)方法得到NodeList中的Node对象
38 Element element =(Element) node;39 //通过Node对象强制转换的方法得到Element对象
40 String id = element.getAttribute("id");41 //通过Element对象的getgetAttribute(String name)方法得到id属性值
42 System.out.println(id);43 //打印id属性值
44 String age = element.getElementsByTagName("age").item(0).getTextContent();45 //通过Element对象的getElementsByTagName(String name)方法得到age的属性值
46 System.out.println(age);47 //打印age
48 }49 /*
50 * 添加元素到XML中51 */
52 Element root =doc.getDocumentElement();53 //通过Document对象的getDocumentElement()方法得到根节点
54 Element newname = doc.createElement("name");55 //通过Document对象的createElement(String tagName)方法得到新的name元素
56 newname.setAttribute("id", "小明");57 //通过调用Element对象的setAttribute(String name,String value)方法为id赋值
58 Element newage = doc.createElement("age");59 //通过Document对象的createElement(String tagName)方法得到新的age元素
60 newage.setTextContent("18");61 //通过调用Element对象的setTextContent(String textContent)方法为age赋值
62 newname.appendChild(newage);63 //添加age到name中
64 root.appendChild(newname);65 //添加name到根节点中
66 /*
67 * 修改XML中的元素68 */
69 for (int i = 0; i < nl.getLength(); i++) {70 Element fixname =(Element) nl.item(i);71 //得到要修改的Element对象
72 String fixnewname = fixname.getAttribute("id");73 //获取到要修改对象的id属性值
74 /*
75 * 判断name是否为要修改的对象76 */
77 if (fixnewname.equals("小明")) {78 Element sex = doc.createElement("sex");79 //创建新的Element对象
80 sex.setAttribute("sex", "男");81 //给新的Element对象的属性赋值
82 fixname.appendChild(sex);83 //添加新的Element(sex)对象到Element(fixname)对象中
84 }85 }86 /*
87 * 删除XML中的元素88 */
89 root.removeChild(root.getChildNodes().item(7));90 //首先通过根节点访问子节点,得到Node对象,然后调用根节点的removeChild(Node oldChild)方法删除元素
91 /*
92 * 将更改写入到XML文件中93 */
94 TransformerFactory tf =TransformerFactory.newInstance();95 //调用TransformerFactory的newInstance()方法得到TransformerFactory对象
96 Transformer t =tf.newTransformer();97 //调用TransformerFactory对象的newTransformer()方法得到Transformer对象
98 t.transform(new DOMSource(doc), new StreamResult("src\\name.xml"));99 //调用Transformer对象的transform(Source xmlSource,Result100 //outputTarget)方法将修改写入到name.xml文件中
101 } catch(ParserConfigurationException e) {102 //TODO Auto-generated catch block
103 e.printStackTrace();104 } catch(SAXException e) {105 //TODO Auto-generated catch block
106 e.printStackTrace();107 } catch(IOException e) {108 //TODO Auto-generated catch block
109 e.printStackTrace();110 } catch(TransformerConfigurationException e) {111 //TODO Auto-generated catch block
112 e.printStackTrace();113 } catch(TransformerException e) {114 //TODO Auto-generated catch block
115 e.printStackTrace();116 }117 }118
119 }