XML 解析(下)

来源:互联网 发布:网络教育哪个专业好考 编辑:程序博客网 时间:2024/06/15 03:29

XML常见的解析方式

  1. DOM(文档对象模型)
    取出.xml文件中的信息
public class StudentManager {    static Document document;    static String Path = "src\\com\\etc\\student.xml";    static {        // 1、创建解析器工厂        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();        DocumentBuilder db;        // 2、根据解析器工厂获得解析器对象        try {            db = dbf.newDocumentBuilder();            // 3、加载XML文档,形成Document对象            document = db.parse(Path);        } catch (Exception e) {            e.printStackTrace();        }    }    public void show() {        NodeList list = document.getElementsByTagName("student");// 取出所有的Student子节点        System.out.println("一共有:" + list.getLength() + "位学生");        for (int i = 0; i < list.getLength(); i++) {            Node node = list.item(i);            //取节点的属性值必须要转换成ELement对象            Element e = (Element) node;            System.out.println("学号:" + e.getAttribute("id"));            // 循环取Student节点下的子节点            for (Node n = node.getFirstChild(); n != null; n = n.getNextSibling()) {                if (n.getNodeType() == node.ELEMENT_NODE)// 判断是不是元素节点                {                    if (!n.getNodeName().equals("scores")) {                        if (n.getNodeName().equals("name")) {                            System.out.println("姓名:"                                    + n.getFirstChild().getNodeValue());                        } else if (n.getNodeName().equals("sex")) {                            System.out.println("性别:"                                    + n.getFirstChild().getNodeValue());                        } else if (n.getNodeName().equals("age")) {                            System.out.println("年龄:"                                    + n.getFirstChild().getNodeValue());                        } else if (n.getNodeName().equals("phone")) {                            System.out.println("电话:"                                    + n.getFirstChild().getNodeValue());                        }                    } else {// 取出成绩                        System.out.println("成绩如下:");                        for (Node scNode = n.getFirstChild(); scNode != null; scNode = scNode                                .getNextSibling()) {                            if (scNode.getNodeType() == scNode.ELEMENT_NODE)                                System.out.println(scNode.getFirstChild()                                        .getNodeValue());                        }                        System.out.println("=============");                    }                }            }        }    }

往.xml文件中添加信息

public void add() {        String name = "王锤锤";        String id = "04";        String sex = "女";        String age = "12";        String phone = "12323423423";        // 创建Student节点        Element studentElement = document.createElement("student");        Attr idAttr = document.createAttribute("id");// 创建ID属性        idAttr.setValue(id);// 给ID属性赋值ֵ        studentElement.setAttributeNode(idAttr);// 把ID属性加入到Student节点中        Element e1 = document.createElement("name");// 创建name节点        e1.setTextContent(name);// 给节点设置数据        studentElement.appendChild(e1);// 把ID属性加入到Student节点中        e1 = document.createElement("sex");// 创建sex节点        e1.setTextContent(sex);// 给节点设置数据        studentElement.appendChild(e1);//把sex属性加入到Student节点中        e1 = document.createElement("age");// 创建age节点        e1.setTextContent(age);// 给节点设置数据        studentElement.appendChild(e1);// 把age属性加入到Student节点中        e1 = document.createElement("phone");// 创建phone节点        e1.setTextContent(phone);// 给节点设置数据        studentElement.appendChild(e1);//把phone属性加入到Student节点中        // 取跟节点        Element root = document.getDocumentElement();        root.appendChild(studentElement);// 把Student节点加入根节点的子节点中        /*save();*/        //更新XML文档        TransformerFactory tff = TransformerFactory.newInstance();        try {                Transformer tf = tff.newTransformer();                DOMSource domSource = new DOMSource(document);                StreamResult ss = new StreamResult(Path);                tf.transform(domSource, ss);            } catch (Exception e) {                e.printStackTrace();            }        }

删除.XML文件节点信息

public void delete() {        String id = "04";        // 取所有Student节点集合        NodeList list = document.getElementsByTagName("student");        // 循环每一个Student节点        for (int i = 0; i < list.getLength(); i++) {            Node n = list.item(i);            Element e = (Element) n;// 取节点的ID属性值ֵ            String idString = e.getAttribute("id");            if (idString.equals(id)) {                // 删除节点,方法是:取当前节点的父节点,根据父节点来一处子节点                n.getParentNode().removeChild(n);                break;            }        }        save();    }

更新.XML文件信息

public void update() {        String id = "04";        String name = "王大锤";        String sex = "男";        // 取所有Student节点集合        NodeList list = document.getElementsByTagName("student");        // 循环每一个Student节点        for (int i = 0; i < list.getLength(); i++) {            Node n = list.item(i);            Element e = (Element) n;// 取节点的ID属性值ֵ            String idString = e.getAttribute("id");            if (idString.equals(id)) {//判断是否要进行更新的节点                // 改节点中某个子节点的内容                for (Node node = n.getFirstChild(); node != null; node = node.getNextSibling()) {                    if (node.getNodeType() == Node.ELEMENT_NODE && node.getNodeName().equals("name")) {                        node.getFirstChild().setTextContent(name);                    } else if (node.getNodeType() == Node.ELEMENT_NODE && node.getNodeName().equals("sex")) {                            node.getFirstChild().setTextContent(sex);                    }                }                break;            }        }        save();    }    public void save() {        //更新XML文档        TransformerFactory tff = TransformerFactory.newInstance();        try {            Transformer tf = tff.newTransformer();            DOMSource domSource = new DOMSource(document);            StreamResult ss = new StreamResult(Path);            tf.transform(domSource, ss);        } catch (Exception e) {            e.printStackTrace();        }    }

DOM4J
DOM4J:非常优秀的Java XML API性能优异。功能强大开放源代码

public class Dom4j1 {    static String Path = "src\\com\\etc\\student.xml";    static Document document = null;    static  {        SAXReader saxReader = new SAXReader();        try {            document =  saxReader.read(new File(Path));        } catch (Exception e) {            e.printStackTrace();        }    }    public void show(){        // 取根节点        Element root = document.getRootElement();        // 取节点下的所有子节点:Student        List<Element> list = root.elements();        for (Element element : list) {            System.out.println("学号:" + element.attribute("id").getValue());            // 取student节点中的所以子节点            List<Element> elements = element.elements();            for (Element element2 : elements) {                if (!element2.getName().equals("scores")) {                    System.out.println(element2.getName() + " : "                            + element2.getText());                } else {                    System.out.println("成绩为:");                    List<Element> scores = element2.elements();                    for (Element e : scores) {                        System.out.println(e.getText());                    }                    System.out.println();                }            }            System.out.println("=======");        }    }    public void add(){        String name = "孙晓晓";        String id= "05";        String sex="女";        String age = "13";        String phone = "23423454323";        //根节点        Element root = document.getRootElement();        //为根节点添加子节点,并且获得刚刚添加的节点对象        Element student = root.addElement("student");        student.addAttribute("id", id);//为Student节点添加属性        student.addElement("name").setText(name);        student.addElement("sex").setText(sex);        student.addElement("age").setText(age);        student.addElement("phone").setText(phone);        save();    }    public void delete(){        String id= "05";        Element root = document.getRootElement();        //取节点下的所有子节点:Student        List<Element> list =  root.elements();        for(int i = 0; i<list.size();i++){            Element element2 = (Element)list.get(i);            String idString = element2.attributeValue("id");            if(idString.equals(id)){                root.remove(element2);            }        }        save();    }    public void update(){        String id = "05";        String name = "孙大大";        String sex = "男";        Element root = document.getRootElement();        //取节点下的所有子节点:Student        List<Element> list =  root.elements();        for(Element e:list){            if(e.attribute("id").getValue().equals(id)){                e.element("name").setText(name);                e.element("sex").setText(sex);            }        }    }    public void save(){        OutputFormat format = OutputFormat.createPrettyPrint();        format.setEncoding("UTF-8");        XMLWriter writer = null;        try {            writer = new XMLWriter(new FileWriter(Path),format);            writer.write(document);        } catch (Exception e) {            e.printStackTrace();        }finally{            try {                writer.close();            } catch (Exception e) {                e.printStackTrace();            }        }    }}