A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 354620815 中级黑马   /  2015-1-13 00:03  /  1009 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 354620815 于 2015-1-13 00:07 编辑
  1. package com.itheima;

  2. import java.io.BufferedReader;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.io.UnsupportedEncodingException;
  8. import java.util.List;

  9. import org.dom4j.Document;
  10. import org.dom4j.Element;
  11. import org.dom4j.io.OutputFormat;
  12. import org.dom4j.io.SAXReader;
  13. import org.dom4j.io.XMLWriter;

  14. public class ParseXml_DOM4J {
  15.         /**
  16.          * 解析exam.xml文件实现以下功能:
  17.          * 添加学生信息
  18.          * 删除学生信息
  19.          * 查询学生信息
  20.          * DOM4j传统的方式:
  21.          *                 1、创建解析器:new SAXReader();
  22.          *                 2、用解析器去读取xml到内存:read();
  23.          *                 3、获取根节点:getRootElement();
  24.          *                         elements():查找元素中的所有元素;
  25.          *                         attributes():查找元素中的所有属性
  26.          *                         remove():删除元素,父删子;
  27.          *                         addAttribute():给元素添加属性;
  28.          *
  29.          * @throws Exception
  30.          */        
  31.         public static void main(String[] args) throws Exception {
  32.                 hint();
  33.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  34.                 String line = null;                        
  35.                 // 创建一个解析器
  36.                 SAXReader saxR = new SAXReader();
  37.                 // 加载XML文件
  38.                 Document document = saxR.read("src/exam.xml");               
  39.                 //读取键盘,判断读取到的字符串,并执行相关操作
  40.                 while((line = bufr.readLine())!=null){
  41.                         if("a".equals(line)){
  42.                                 addStu(bufr,document);
  43.                         }else if("b".equals(line)){
  44.                                 delStu(bufr,document);
  45.                         }else if("c".equals(line)){
  46.                                 selectStu(bufr,document);
  47.                         }else if("over".equals(line)){
  48.                                 break;
  49.                         }else {
  50.                                 System.out.println("操作有误...请重新输入...");
  51.                         }                        
  52.                 }
  53.         }
  54.         /**
  55.          * 提醒用户
  56.          */
  57.         public static void hint(){
  58.                 System.out.println("添加用户(a) 删除用户(b) 查询用户(c)");
  59.                 System.out.println("请输入操作类型");
  60.         }
  61.         /**
  62.          * 查找学生
  63.          * @param bufr
  64.          * @param document
  65.          * @throws Exception
  66.          */
  67.         private static void selectStu(BufferedReader bufr, Document document) throws Exception {
  68.                 boolean flag = true;
  69.                 System.out.println("请输入准考证号:");
  70.                 String examid = bufr.readLine();
  71.                 Element root = document.getRootElement();
  72.                 List<Element> stuEles = root.elements("student");
  73.                 for(Element stuEle : stuEles){
  74.                         if(examid.equals(stuEle.attribute("examid").getText())){
  75.                                 System.out.println("姓名:" + stuEle.element("name").getText());
  76.                                 System.out.println("身份证:" + stuEle.attribute("idcard").getText());
  77.                                 System.out.println("准考证:" + stuEle.attribute("examid").getText());
  78.                                 System.out.println("地区:" + stuEle.element("location").getText());
  79.                                 System.out.println("成绩:" + stuEle.element("grade").getText());
  80.                                 flag = false;
  81.                         }
  82.                 }        
  83.                 if(flag){
  84.                         System.out.println("找不到...");
  85.                         selectStu(bufr,document);
  86.                 }else{
  87.                         hint();
  88.                 }
  89.         }
  90.         /**
  91.          * 删除学生
  92.          * @param bufr
  93.          * @param document
  94.          * @throws Exception
  95.          */
  96.         private static void delStu(BufferedReader bufr, Document document) throws Exception {
  97.                 boolean flag = false;
  98.                 System.out.println("请输入要删除的学生姓名:");
  99.                 String name = bufr.readLine();
  100.                 //获取根节点               
  101.                 Element root = document.getRootElement();
  102.                 //获取所有学生节点
  103.                 List<Element> stuEles = root.elements("student");
  104.                 for(Element stuEle : stuEles){
  105.                         if(name.equals(stuEle.element("name").getText())){
  106.                                 root.remove(stuEle);
  107.                                 flag = true;
  108.                         }
  109.                 }
  110.                 if(flag){
  111.                         write2xml(document);
  112.                         System.out.println("......删除成功......");
  113.                         hint();
  114.                 }else {
  115.                         System.out.println("......删除失败......");
  116.                         delStu(bufr,document);
  117.                 }               
  118.         }
  119.         /**
  120.          * 添加学生
  121.          * @param bufr
  122.          * @param document
  123.          * @throws Exception
  124.          */
  125.         public static void addStu(BufferedReader bufr, Document document) throws Exception{
  126.                 System.out.println("请输入姓名:");
  127.                 String name = bufr.readLine();
  128.                 System.out.println("请输入准考证号:");
  129.                 String examid = bufr.readLine();
  130.                 System.out.println("请输入身份证:");
  131.                 String idcard = bufr.readLine();
  132.                 System.out.println("请输入所在地:");
  133.                 String location = bufr.readLine();
  134.                 System.out.println("请输入成绩:");
  135.                 String grade = bufr.readLine();        
  136.                 //获取根节点
  137.                 Element root = document.getRootElement();
  138.                 //添加学生节点和属性
  139.                 Element studentEle = root.addElement("student").addAttribute("idcard", idcard)
  140.                                                                  .addAttribute("examid", examid);
  141.                 //添加名字节点
  142.                 studentEle.addElement("name").setText(name);
  143.                 //添加地址节点
  144.                 studentEle.addElement("location").setText(location);
  145.                 //添加成绩节点
  146.                 studentEle.addElement("grade").setText(grade);
  147.                 //写到xml中
  148.                 write2xml(document);
  149.                 System.out.println("....添加成功......");
  150.                 hint();
  151.         }
  152.         /**
  153.          * 将内存的文档写到xml中
  154.          * @param document
  155.          * @throws Exception
  156.          * @throws FileNotFoundException
  157.          */
  158.         public static void write2xml(Document document) throws Exception, FileNotFoundException{
  159.                 XMLWriter write = new XMLWriter(new FileOutputStream("src/exam.xml"),
  160.                                                                                                 OutputFormat.createPrettyPrint());
  161.                 write.write(document);
  162.                 write.close();
  163.         }
  164.                
  165. }
复制代码
xml文件:
<?xml version="1.0" encoding="UTF-8"?>

<exam>
  <student idcard="111" examid="222">
    <name>张三</name>  
    <location>沈阳</location>  
    <grade>89</grade>
  </student>  
  <student idcard="333" examid="444">
    <name>李四</name>  
    <location>大连</location>  
    <grade>97</grade>
  </student>
</exam>

评分

参与人数 1技术分 +2 收起 理由
lwj123 + 2

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马