java高階特性與實戰專案——第六章:XML
阿新 • • 發佈:2019-01-25
public class Student { /** * 獲取文件 */ Document document = null; public void gain() { //建立工廠 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { //從工廠獲得解析器 DocumentBuilder db = dbf.newDocumentBuilder(); //解析XML文件 document = db.parse("成績資訊.xml"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 列印資訊 */ public void print() { NodeList stuList = document.getElementsByTagName("student"); for (int i = 0; i < stuList.getLength(); i++) { Node student = stuList.item(i); Element element=(Element) student; String str =element.getAttribute("id"); System.out.println("\nid:"+str); NodeList Stu2 = student.getChildNodes(); for (int j = 0; j < Stu2.getLength(); j++) { Node Student = Stu2.item(j); if (Student.getNodeType() == Node.ELEMENT_NODE) { System.out.println(Student.getNodeName()+":"+Student.getTextContent()); } } } } /** * 刪除節點 */ public void delete() { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); db = dbf.newDocumentBuilder(); Document document = db.parse("成績資訊.xml"); NodeList list = document.getElementsByTagName("student"); for (int i = 0; i < list.getLength(); i++) { Element element = (Element) list.item(i); String id = element.getAttribute("id"); if(id.equals("1")) { element.getParentNode().removeChild(element); } } TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource domSource = new DOMSource(document); transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); StreamResult result = new StreamResult(new FileOutputStream("新成績資訊.xml")); transformer.transform(domSource, result); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 新增節點 */ public void addinfo() { //建立student,Name,course,score節點 Element stuElement = document.createElement("student"); Element NaElement = document.createElement("Name"); Element couElement = document.createElement("course"); Element scoElement = document.createElement("score"); //元素節點 Attr attr = document.createAttribute("id"); attr.setValue("3"); //文字節點 Text testname = document.createTextNode("王麻子"); Text testcou = document.createTextNode("數學"); Text testscore = document.createTextNode("45"); //將文字節點新增到元素的子節點 NaElement.appendChild(testname); couElement.appendChild(testcou); scoElement.appendChild(testscore); //將元素節點新增到student stuElement.setAttributeNode(attr); stuElement.appendChild(NaElement); stuElement.appendChild(couElement); stuElement.appendChild(scoElement); //得到根元素 Element men = document.getDocumentElement(); men.appendChild(stuElement); try { //儲存文字 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource domSource = new DOMSource(document); transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); StreamResult result = new StreamResult(new FileOutputStream("新成績資訊.xml")); transformer.transform(domSource, result); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } /** * 修改資訊 */ public void amend() { NodeList list = document.getElementsByTagName("student"); for (int i = 0; i < list.getLength(); i++) { Element stuElement = (Element) list.item(i); String stu = stuElement.getAttribute("id"); if(stu.equals("2")) { NodeList sco = stuElement.getElementsByTagName("score"); Element element = (Element) sco.item(0); element.setTextContent("60分"); } try { //儲存文字 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource domSource = new DOMSource(document); transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); StreamResult result = new StreamResult(new FileOutputStream("新成績資訊.xml")); transformer.transform(domSource, result); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } } public static void main(String[] args) { Student student = new Student(); //建立一個新的物件 student.gain(); student.print(); // student.delete(); //刪除節點 // student.print(); // student.amend(); //修改 // student.print(); // student.addinfo(); //新增 // student.print(); } }