天天看点

解析xml进行DOM操作练习

XML 文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?><kao>
    <student kaohao="438" idcard="370101">
        <name>郭美美</name>
        <location>湖南</location>
        <age>100</age>
    </student>

</kao>
           

Stduent.domain包

package com.xmldom.student;

public class Student {
    private String kaohao;
    private String idcard;
    private String name;
    private String location;
    private int age ;
    public Student(String kaohao, String idcard, String name, String location, int age) {
        super();
        this.kaohao = kaohao;
        this.idcard = idcard;
        this.name = name;
        this.location = location;
        this.age = age;
    }
    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }
    public String getKaohao() {
        return kaohao;
    }
    public void setKaohao(String kaohao) {
        this.kaohao = kaohao;
    }
    public String getIdcard() {
        return idcard;
    }
    public void setIdcard(String idcard) {
        this.idcard = idcard;
    }
    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 int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student [kaohao=" + kaohao + ", idcard=" + idcard + ", name=" + name + ", location=" + location
                + ", age=" + age + "]";
    }


}
           

Studentdao

package com.dao;

import com.xmldom.student.Student;

public interface StudentDao {
  //增删改查
    /**
     * 添加学生到XML
     * @param s  封装了要保存的学生信息
     * @return 成功true ,否则返回false
     */

    public abstract boolean add(Student s) ;

    /**
     * 
     * @param name 根据学生的姓名来删除
     * @return  删除成功返回true,失败或者不存在返回false. 
     */
    public abstract boolean delStudentByName(String name); 

    /**
     * 
     * @param idcard 根据身份证查询学生
     * @return  找到了就返回学生,没有就返回NULL
     */
    public abstract Student findStudent(String idcard);

}
           

daoImpl

package com.dao;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import com.xmldom.student.Student;

import jaxp.util.JavaxpUitl;

public class StudentDaoImpl implements StudentDao {

    @Override
    public boolean add(Student s) {
        // 加载XML
        boolean b = false;
        try {
            Document d = JavaxpUitl.getDocument();
            // 添加<student></student> 节点
            Element e = d.createElement("student");
            // 给他设置属性
            e.setAttribute("idcard", s.getIdcard());
            e.setAttribute("kaohao", s.getKaohao());

            // 添加3个子节点 name location age
            Element nameE = d.createElement("name");
            // 添加文本内容
            nameE.setTextContent(s.getName());
            Element locationE = d.createElement("location");
            // 添加文本内容
            locationE.setTextContent(s.getLocation());
            Element ageE = d.createElement("age");
            // 添加文本内容
            // ageE.setTextContent(String.valueOf(s.getAge()));
            ageE.setTextContent("" + s.getAge());
            // 把3个节点添加student标签上
            e.appendChild(nameE);
            e.appendChild(locationE);
            e.appendChild(ageE);
            // 再把student 添加到kao 下
            Node k = d.getElementsByTagName("kao").item();
            k.appendChild(e);
            // 写回到XML中
            JavaxpUitl.writeXml(d);

            b = true;
        } catch (Exception e) {
            // 编译时异常转化为运行时异常
            throw new RuntimeException();
        }

        return b;
    }

    @Override
    public boolean delStudentByName(String name) {
        // 加载XML
        boolean b = false;
        try {
            Document d = JavaxpUitl.getDocument();
            // 得到name节点集合 元素下的文本进行比较相同就删除 name 有多个
            NodeList nl = d.getElementsByTagName("name");
            // 遍历进行判断
            for (int i = ; i < nl.getLength(); i++) {
                if (nl.item(i).getTextContent().equals(name)) {
                    // 就直接删除student
                    Node kao = d.getElementsByTagName("kao").item();

                    kao.removeChild(nl.item(i).getParentNode());
                    // 写会文档
                    JavaxpUitl.writeXml(d);
                    b = true;
                }
            }

        } catch (Exception e) {
            // 把编译时期的异常转换为运行时期
            throw new RuntimeException();
        }

        return b;
    }

    @Override
    public Student findStudent(String idcard) {
        // 加载XML
        Student s = null;
        try {
            Document d = JavaxpUitl.getDocument();
            // 得到student节点集合的属性进行判断
            NodeList nl = d.getElementsByTagName("student");
            // 元素才可以调用属性进行判断
            for (int i = ; i < nl.getLength(); i++) {
                Node n = nl.item(i);
                // 如果是元素
                if (n.getNodeType() == Node.ELEMENT_NODE) {
                    Element e = (Element) n;
                    if (e.getAttribute("idcard").equals(idcard)) {
                        // 就把这个student元素 中的内容赋值给Student
                        s = new Student();
                        s.setIdcard(e.getAttribute("idcard"));
                        s.setKaohao(e.getAttribute("kaohao"));
                        s.setAge(Integer.parseInt(e.getElementsByTagName("age").item().getTextContent()));
                        s.setLocation(e.getElementsByTagName("location").item().getTextContent());
                        s.setName(e.getElementsByTagName("name").item().getTextContent());

                    }

                }

            }

        } catch (Exception e) {
            throw new RuntimeException();
        }

        //
        return s;
    }

}
           

加载XML的工具类

package jaxp.util;
//加载和解析的XML的工具类

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;

public class JavaxpUitl {

    // 加载XML
    public static Document getDocument() throws ParserConfigurationException, SAXException, IOException {
        // Document 生成的工厂
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        // 加载XML生成document
        Document d = db.parse("myx.xml");

        return d;

    }

    // 写回数据到XML中
    public static void writeXml(Document d) throws TransformerException {
        TransformerFactory tff = TransformerFactory.newInstance();
        Transformer tf = tff.newTransformer();
        // 调用转化方法
        tf.transform(new DOMSource(d), new StreamResult("myx.xml"));

    }

}
           

测试类

package student.test;

import com.dao.StudentDao;
import com.dao.StudentDaoImpl;
import com.xmldom.student.Student;

public class StudentTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        StudentDao d = new StudentDaoImpl();

        /*
         * Student s = new Student();
         * 
         * s.setAge(22); s.setIdcard("2423"); s.setKaohao("3333");
         * s.setLocation("sichjan"); s.setName("zhan3"); d.add(s);
         * 
         * s= d.findStudent("2423"); System.out.println(s);
         */

        System.out.println(d.delStudentByName("zhan3"));

    }

}