將xml文件作為一個(gè)小的數(shù)據(jù)庫,進(jìn)行學(xué)生的增刪改查的簡(jiǎn)單實(shí)例
1.xml文件:
<?xml version="1.0" encoding="UTF-8"?><Students> <student id="2"> <name>ttt</name> <age>44</age> </student> <student id="3"> <name>linda2</name> <age>22</age> </student> <student id="4"> <name>linda3</name> <age>23</age> </student> <student id="5"> <name>jack</name> <age>2</age> </student> <student id="1"> <name>yyh1</name> <age>22</age> </student> </Students>
2.Java代碼
import java.io.File; import java.io.IOException; import java.util.Scanner; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.w3c.dom.Text; import org.xml.sax.SAXException; //在學(xué)生管理系統(tǒng)里面,學(xué)生的學(xué)號(hào)是唯一的,姓名有可能重復(fù) public class StudentManager { public static void main(String[] args) { try { Document doc = Domutils.getDoc(new File("xml文件的相對(duì)路徑")); Scanner input = new Scanner(System.in); System.out.println("歡迎來到學(xué)生管理系統(tǒng)\n\n\n請(qǐng)輸入你要進(jìn)行什么操作是:\n1.添加學(xué)生信息\n2.刪除學(xué)生信息\n3.修改學(xué)生信息\n(請(qǐng)輸入前邊的序號(hào))"); int num = input.nextInt(); if(num == 1) { addStudent(doc); }else if(num == 2) { delStudent(doc); }else if(num == 3) { updStudent(doc); } } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } } //修改學(xué)生信息 private static void updStudent(Document doc) { Element updStudent = null; Scanner input = new Scanner(System.in); System.out.println("請(qǐng)輸入你要修改的學(xué)生的學(xué)號(hào):"); String studentid = input.nextLine(); System.out.println("請(qǐng)輸入新學(xué)生的姓名:"); String newName = input.nextLine(); System.out.println("請(qǐng)輸入新學(xué)生的年齡:"); String newAge = input.nextLine(); //將每一個(gè)學(xué)生的列出來,for循環(huán)判斷你要修改信息的學(xué)生是哪一個(gè) NodeList list = doc.getElementsByTagName("student"); for(int i = 0; i <list.getLength(); i++) { if(studentid.equals(list.item(i).getAttributes().getNamedItem("id").getNodeValue())){ updStudent = (Element) doc.getElementsByTagName("student").item(i).getFirstChild().getParentNode(); //對(duì)學(xué)生的name屬性進(jìn)行賦新值 updStudent.getElementsByTagName("name").item(i).getFirstChild().setNodeValue(newName); //對(duì)學(xué)生的age 屬性賦新值 updStudent.getElementsByTagName("age").item(i).getFirstChild().setNodeValue(newAge); }else{ break; } } //找出根元素,將修改后的元素持久化到文件 Element root = doc.getDocumentElement(); transform(root); System.out.println(updStudent); } //刪除學(xué)生信息 private static void delStudent(Document doc) { Scanner input = new Scanner(System.in); //輸入你要?jiǎng)h除的學(xué)生的 學(xué)號(hào) System.out.println("請(qǐng)輸入要?jiǎng)h除學(xué)生的學(xué)號(hào):"); String studentid = input.nextLine(); Element root = doc.getDocumentElement(); //將學(xué)生列成一個(gè)表,進(jìn)行遍歷,找對(duì)應(yīng)學(xué)號(hào)的學(xué)生進(jìn)行刪除 NodeList list = doc.getElementsByTagName("student"); for(int i = 0; i < list.getLength(); i++) { if((studentid).equals(list.item(i).getAttributes().getNamedItem("id").getNodeValue())){ Element delStudent = (Element) doc.getElementsByTagName("student").item(i).getFirstChild().getParentNode(); root.removeChild(delStudent); break; }else { System.out.println("沒有該學(xué)生"); break; } } //持久化到文件 transform(root); } //添加學(xué)生信息 private static void addStudent(Document doc) { // System.out.println(doc.getElementsByTagName("student").item(1).getAttributes().getNamedItem("id").getNodeValue()); Element root = doc.getDocumentElement(); //從控制臺(tái)輸入 Scanner input = new Scanner(System.in); System.out.println("請(qǐng)輸入學(xué)生的序號(hào):id = "); //將學(xué)生放到一個(gè)列表里面,看我們要添加的學(xué)生的學(xué)號(hào)里面是否已經(jīng)有了,如果有,需要將新加入的學(xué)生的學(xué)號(hào)改一下 NodeList list = doc.getElementsByTagName("student"); String studentid = input.nextLine(); for(int i = 0; i < list.getLength(); i++) { if(studentid.equals(list.item(i).getAttributes().getNamedItem("id").getNodeValue())){ System.out.println("該序號(hào)學(xué)生表里面已經(jīng)存在,請(qǐng)重新輸入一個(gè)新的序號(hào):"); studentid = input.nextLine(); }else { break; } } System.out.println("請(qǐng)輸入要添加學(xué)生的姓名:name = "); String name_value = input.nextLine(); System.out.println("請(qǐng)輸入要添加學(xué)生的年齡:age = "); String age_value = input.nextLine(); //創(chuàng)建節(jié)點(diǎn) Element student = doc.createElement("student"); Element name = doc.createElement("name"); Element age = doc.createElement("age"); Text namText = doc.createTextNode(name_value); Text ageText = doc.createTextNode(age_value); //關(guān)聯(lián)節(jié)點(diǎn)之間的關(guān)系 root.appendChild(student); student.appendChild(name); student.appendChild(age); student.setAttribute("id", studentid); name.appendChild(namText); age.appendChild(ageText); //持久化到文件 transform(root); } //持久化到文件的方法 private static void transform(Element root) throws TransformerFactoryConfigurationError { TransformerFactory factory = TransformerFactory.newInstance(); try { Transformer tf = factory.newTransformer(); tf.transform(new DOMSource(root), new StreamResult(new File("src/com/briup/dom/student.xml"))); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } } }
2.Dom解析文件(將獲取解析文件的部分封裝起來)
import java.io.File; import java.io.IOException; import java.nio.file.attribute.AclEntry.Builder; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.xml.sax.SAXException; public class Domutils { public static Document getDoc(File file) throws SAXException, IOException, ParserConfigurationException { //獲取工廠模式 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //獲取builder對(duì)象 DocumentBuilder builder = factory.newDocumentBuilder(); //將要解析文件加載成一個(gè)樹狀文件,開始解析 Document document = builder.parse(file); return document; } }
以上這篇將xml文件作為一個(gè)小的數(shù)據(jù)庫,進(jìn)行學(xué)生的增刪改查的簡(jiǎn)單實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
ajax實(shí)現(xiàn)提交時(shí)校驗(yàn)表單方法
這篇文章主要為大家詳細(xì)介紹了ajax實(shí)現(xiàn)提交時(shí)校驗(yàn)表單方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02Ajax傳遞中文參數(shù)到后臺(tái)亂碼的有效解決方法
使用Ajax傳遞中文參數(shù),如果不對(duì)參數(shù)進(jìn)行處理的話,傳到后臺(tái)會(huì)變成亂碼,解決方法很簡(jiǎn)單,需要的朋友可以參考下本文2014-05-05Ajax實(shí)現(xiàn)帶有驗(yàn)證碼的局部刷新登錄界面
很多登錄界面都有驗(yàn)證碼功能局部刷新效果,接下來通過本文給大家分享ajax實(shí)現(xiàn)帶有驗(yàn)證碼的局部刷新登錄界面,感興趣的朋友一起看看吧2016-09-09基于Ajax表單提交及后臺(tái)處理簡(jiǎn)單的應(yīng)用
下面小編就為大家?guī)硪黄贏jax表單提交及后臺(tái)處理簡(jiǎn)單的應(yīng)用。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09Ajax學(xué)習(xí)全套(最全最經(jīng)典)
ajax是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)。這篇文章主要介紹了Ajax學(xué)習(xí)全套(最全最經(jīng)典)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08Ajax獲取數(shù)據(jù)然后顯示在頁面的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄狝jax獲取數(shù)據(jù)然后顯示在頁面的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08