将琴存诗
人生 可以不要那么 耀 ,只需要有 一个  平凡的梦想  足以 。—— loveincode -_^ RSS
Fork me on GitHub

JAXP Dom 案例 对xml文件进行增加 查找 删除

利用 JAXP 对 XML文件 的处理,把xml当做一个数据库来对待

 

Student对象定义类

public class Student {

    private String idcard;//身份证号

    private String examid;//准考证号

    private String name;//姓名

    private String location;//籍贯

    private float grade;//成绩

   

    public Student(){}

   

   

    public Student(String idcard, String examid, String name, String location,

            float grade) {

        super();

        this.idcard = idcard;

        this.examid = examid;

        this.name = name;

        this.location = location;

        this.grade = grade;

    }

 

 

    public String getIdcard() {

        return idcard;

    }

    public void setIdcard(String idcard) {

        this.idcard = idcard;

    }

    public String getExamid() {

        return examid;

    }

    public void setExamid(String examid) {

        this.examid = examid;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public String getLocation() {

        return location;

    }

    public void setLocation(String location) {

        this.location = location;

    }

    public float getGrade() {

        return grade;

    }

    public void setGrade(float grade) {

        this.grade = grade;

    }

    @Override

    public String toString() {

        return "Student [idcard=" + idcard + ", examid=" + examid + ", name="

                + name + ", location=" + location + ", grade=" + grade + "]";

    }

   

}
View Code

 

 

StudentDao 接口类

//原则:抽象和实现分离

//根据功能要求

//接口中的每个方法:注释要写的清清楚楚,做到没有歧义

 1 public interface StudentDao {
 2 
 3     /**
 4 
 5      * 添加学生信息到数据库
 6 
 7      * @param s 封装了要保存的信息的学生对象
 8 
 9      * @return 成功了返回true,否则false
10 
11      */
12 
13     boolean addStudent(Student s);
14 
15     /**
16 
17      * 根据准考证号查询学生的信息
18 
19      * @param examid 准考证号
20 
21      * @return 没有找到返回null
22 
23      */
24 
25     Student findByExamid(String examid);
26 
27     /**
28 
29      * 根据姓名删除学生信息
30 
31      * @param name 学生的姓名
32 
33      * @return 删除成功返回true。删除失败或学生不存在都返回false
34 
35      */
36 
37     boolean delStudentByName(String name);
38 
39 }
View Code

 

 

StudentDaoimpl 实现类

  1 public class StudentDaoImpl implements StudentDao {
  2 
  3  
  4 
  5      public boolean addStudent(Student s) {
  6 
  7          boolean result = false;
  8 
  9          try {
 10 
 11               //得到Document对象
 12 
 13               Document doc = JaxpUtil.getDocument();//异常怎么办?抛:调用者得有能力处理。处理
 14 
 15               //创建<student>:设置属性
 16 
 17               Element studentE = doc.createElement("student");//<student></student>
 18 
 19               studentE.setAttribute("idcard", s.getIdcard());
 20 
 21               studentE.setAttribute("examid", s.getExamid());//<student idcard="370101" examid="438">
 22 
 23               //依次创建<name><location><grade>并设置主体内容
 24 
 25               Element nameE = doc.createElement("name");//<name></name>
 26 
 27               nameE.setTextContent(s.getName());// <name>郭美美</name>
 28 
 29              
 30 
 31               Element locationE = doc.createElement("location");
 32 
 33               locationE.setTextContent(s.getLocation());
 34 
 35              
 36 
 37               Element gradeE = doc.createElement("grade");
 38 
 39               gradeE.setTextContent(s.getGrade()+"");
 40 
 41               //建立与student元素的父子关系
 42 
 43               studentE.appendChild(nameE);
 44 
 45               studentE.appendChild(locationE);
 46 
 47               studentE.appendChild(gradeE);
 48 
 49               //把student挂接到根元素上
 50 
 51               Node rootNode = doc.getElementsByTagName("exam").item(0);
 52 
 53               rootNode.appendChild(studentE);
 54 
 55               //写回xml文档中
 56 
 57               JaxpUtil.write2xml(doc);
 58 
 59               result = true;
 60 
 61          } catch (Exception e) {
 62 
 63               throw new RuntimeException(e);//编译时异常--》运行时异常:异常转义;异常链
 64 
 65          }
 66 
 67          return result;
 68 
 69      }
 70 
 71  
 72 
 73      public Student findByExamid(String examid) {
 74 
 75          Student s = null;
 76 
 77          try {
 78 
 79               //得到Document对象
 80 
 81               Document doc = JaxpUtil.getDocument();
 82 
 83               //得到所有的<student>元素
 84 
 85               NodeList nl  = doc.getElementsByTagName("student");
 86 
 87               //遍历:判断属性的值和参数的值是否相等
 88 
 89               for(int i=0;i<nl.getLength();i++){
 90 
 91                    //相等:读取属性和子元素的文本,封装到Student对象中
 92 
 93                    Node node = nl.item(i);
 94 
 95                    if(node.getNodeType()==Node.ELEMENT_NODE){
 96 
 97                        Element e = (Element)node;
 98 
 99                        if(e.getAttribute("examid").equals(examid)){
100 
101                             s = new Student();
102 
103                             s.setIdcard(e.getAttribute("idcard"));
104 
105                             s.setExamid(examid);
106 
107                             s.setName(e.getElementsByTagName("name").item(0).getTextContent());
108 
109                             s.setLocation(e.getElementsByTagName("location").item(0).getTextContent());
110 
111                             s.setGrade(Float.parseFloat(e.getElementsByTagName("grade").item(0).getTextContent()));
112 
113                             break;
114 
115                        }
116 
117                    }
118 
119               }
120 
121               //返回数据
122 
123          } catch (Exception e) {
124 
125               throw new RuntimeException(e);//编译时异常--》运行时异常:异常转义;异常链
126 
127          }
128 
129          return s;
130 
131      }
132 
133  
134 
135      public boolean delStudentByName(String name) {
136 
137          boolean result = false;
138 
139          try {
140 
141               //得到Document对象
142 
143               Document doc = JaxpUtil.getDocument();
144 
145               //得到所有的name元素
146 
147               NodeList nl = doc.getElementsByTagName("name");
148 
149               //遍历:判断元素的文本和参数是否相等
150 
151               for(int i=0;i<nl.getLength();i++){
152 
153                    Node node = nl.item(i);
154 
155                    if(node.getTextContent().equals(name)){
156 
157                        //如果是:爷爷干掉爸爸
158 
159                        node.getParentNode().getParentNode().removeChild(node.getParentNode());
160 
161                        //写回xml文档
162 
163                        JaxpUtil.write2xml(doc);
164 
165                        //设置标记为true
166 
167                        result = true;
168 
169                    }
170 
171               }
172 
173          } catch (Exception e) {
174 
175               throw new RuntimeException(e);//编译时异常--》运行时异常:异常转义;异常链
176 
177          }
178 
179          return result;
180 
181      }
182 
183  
184 
185 }
View Code

 

 

JavaUtil

//工具类

//异常可以处理:不给调用者添麻烦

//可以抛:谁用谁处理

 1 public class JaxpUtil {
 2 
 3     public static Document getDocument() throws ParserConfigurationException, SAXException, IOException{
 4 
 5         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
 6 
 7         DocumentBuilder builder = dbf.newDocumentBuilder();//异常怎么办?哲学问题
 8 
 9         Document document = builder.parse("src/exam.xml");
10 
11         return document;
12 
13     }
14 
15     public static void write2xml(Document document) throws TransformerException{
16 
17         TransformerFactory tf = TransformerFactory.newInstance();
18 
19         Transformer ts = tf.newTransformer();
20 
21         ts.transform(new DOMSource(document), new StreamResult("src/exam.xml"));
22 
23     }
24 
25 }
View Code

 

 

StudentDaoImplTest 测试类

 1 public class StudentDaoImplTest {
 2 
 3     public static void main(String[] args) {
 4 
 5        StudentDao dao = new StudentDaoImpl();
 6 
 7  
 8 
 9 //     Student s = new Student();
10 
11 //     s.setExamid("999");
12 
13 //     s.setIdcard("1101");
14 
15 //     s.setName("牛骞");
16 
17 //     s.setLocation("河南");
18 
19 //     s.setGrade(100);
20 
21 //     dao.addStudent(s);
22 
23       
24 
25        Student s = dao.findByExamid("999");
26 
27        System.out.println(s);
28 
29       
30 
31 //     boolean b = dao.delStudentByName("牛骞");
32 
33 //     System.out.println(b);
34 
35     }
View Code

 

 

 
 

 

posted @ 2015-11-29 16:51  loveincode  阅读(318)  评论(0编辑  收藏  举报
最简单即最美
有了信仰,自己要坚持努力 2017.07.09 21:34