問題
解析如下格式的xml文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?><exam> <student examid="111" idcard="123"> <name>張三</name> <location>廣州</location> <grade>100</grade> </student> <student examid="444" idcard="333"> <name>李四</name> <location>大連</location> <grade>97</grade> </student> <student examid="1111111" idcard="22222"> <name>小毛</name> <location>廣州</location> <grade>23.0</grade> </student> <student examid="199" idcard="300"> <grade>80.0</grade> <location>廣州</location> <name>鍾源茂</name> </student> </exam>
解決
根據數據,定義類對象用於存儲
@Getter @Setter class Student{ private String name; private String examid; private String idcart; private String location; private String grade; @Override public String toString(){ return "姓名:" + name + ", 身份證號:" + idcart + ", 准考證號:" + examid + ", 地區:" + location + ", 成績:" + grade; } }
解析xml數據
public class JaxpSimpleDemo { private static Student find() throws Exception { Document document = getDocument(); NodeList list = document.getElementsByTagName("student"); for (int i = 0; i < list.getLength(); i++) { Element element = (Element) list.item(i); Student student = new Student(); student.setExamid(element.getAttribute("examid")); student.setIdcart(element.getAttribute("idcard")); student.setName(element.getElementsByTagName("name").item(0).getTextContent()); student.setLocation(element.getElementsByTagName("location").item(0).getTextContent()); student.setGrade(element.getElementsByTagName("grade").item(0).getTextContent()); System.out.println(student); } return null; } private static Document getDocument() throws ParserConfigurationException, IOException, org.xml.sax.SAXException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new File("/Users/***/exam.xml")); Element e = document.getDocumentElement(); return document; } public static void main(String[] args) throws Exception { find(); }
結果
姓名:張三, 身份證號:123, 准考證號:111, 地區:廣州, 成績:100 姓名:李四, 身份證號:333, 准考證號:444, 地區:大連, 成績:97 姓名:小毛, 身份證號:22222, 准考證號:1111111, 地區:廣州, 成績:23.0 姓名:鍾源茂, 身份證號:300, 准考證號:199, 地區:廣州, 成績:80.0
解析
<student>里面有兩類數據:一是成員變量、一是標簽,分別用以下獲取
- element.getAttribute("idcard")
- element.getElementsByTagName("name").item(0).getTextContent()
拓展
增刪改查
package xmlparse; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; public class JaxpDemo { public static void main(String[] args) throws Exception { System.out.print("添加用戶:a "); System.out.print("刪除用戶:b "); System.out.println("查詢成績:c"); System.out.print("請輸入操作類型:"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String type = br.readLine(); if ("a".equals(type)) { //添加用戶 Student student = new Student(); System.out.print("請輸入學生姓名:"); String name = br.readLine(); student.setName(name); System.out.print("請輸入學生准考證號:"); String examid = br.readLine(); student.setExamid(examid); System.out.print("請輸入學生身份證號:"); String idcard = br.readLine(); student.setIdcart(idcard); System.out.print("請輸入學生所在地:"); String location = br.readLine(); student.setLocation(location); System.out.print("請輸入學生成績:"); String grade = br.readLine(); student.setGrade(grade); add(student); System.out.println("------添加數據成功------"); } else if ("b".equals(type)) { //刪除用戶 System.out.print("請輸入刪除的學生姓名:"); String name = br.readLine(); delete(name); System.out.println("------已成功刪除學生信息------"); } else if ("c".equals(type)) { //查詢成績 System.out.print("請輸入查詢的學生准考證號:"); String examid = br.readLine(); Student student = find(examid); System.out.println("您查詢的學生信息為:"); System.out.println(student); } else { System.out.println("對不起,您的操作有誤!!"); } } private static Student find(String examid) throws Exception { Document document = getDocument(); NodeList list = document.getElementsByTagName("student"); for (int i = 0; i < list.getLength(); i++) { Element element = (Element) list.item(i); String value = element.getAttribute("examid"); if (examid.equals(value)) { Student student = new Student(); student.setExamid(examid); student.setIdcart(element.getAttribute("idcard")); student.setName(element.getElementsByTagName("name").item(0).getTextContent()); student.setLocation(element.getElementsByTagName("location").item(0).getTextContent()); student.setGrade(element.getElementsByTagName("grade").item(0).getTextContent()); return student; } } return null; } private static void delete(String name) throws ParserConfigurationException, IOException, TransformerException, org.xml.sax.SAXException { Document document = getDocument(); NodeList list = document.getElementsByTagName("name"); for (int i = 0; i < list.getLength(); i++) { Node node = list.item(i); if (node.getTextContent().equals(name)) { node.getParentNode().getParentNode().removeChild(node.getParentNode()); } } writeXml(document); } private static void add(Student student) throws Exception { Document document = getDocument(); Element studentNode = document.createElement("student"); studentNode.setAttribute("idcard", student.getIdcart()); studentNode.setAttribute("examid", student.getExamid()); Node name = document.createElement("name"); name.setTextContent(student.getName()); Node location = document.createElement("location"); location.setTextContent(student.getLocation()); Node grade = document.createElement("grade"); grade.setTextContent(student.getGrade()); studentNode.appendChild(name); studentNode.appendChild(location); studentNode.appendChild(grade); Element root = document.getDocumentElement(); root.appendChild(studentNode); writeXml(document); } //將內存中的數據保存到XML文件中 private static void writeXml(Document document) throws TransformerException { DOMSource source = new DOMSource(document); StreamResult result = new StreamResult(new File("src/exam.xml")); TransformerFactory factory = TransformerFactory.newInstance(); Transformer trans = factory.newTransformer(); trans.transform(source, result); } //獲得操作xml文件的對象 private static Document getDocument() throws ParserConfigurationException, IOException, org.xml.sax.SAXException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//得到創建 DOM 解析器的工廠。 DocumentBuilder builder = factory.newDocumentBuilder();//得到 DOM 解析器對象。 Document document = builder.parse(new File("/Users/wzh94434/Code/codetest/javalearntest/src/main/java/xmlparse/exam.xml")); //得到代表整個文檔的 Document 對象 Element e = document.getDocumentElement(); return document; } }