分分钟getXML解析之DOM解析。

来源:互联网 发布:担保公司业务软件 编辑:程序博客网 时间:2024/06/11 21:14

XML简介

xml:extensive markup language.可拓展性表示语言。
他主要的作用就是持久化存储数据
数据交换,传输数据的一种文本格式。
数据配置,用于配置文件。
xml的解析方法有三种:
1,DOM解析。
2,SAX解析。
3,pull解析。


DOM解析

DOM解析有两种方式。

1,使用Jaxp实现DOM解析
即使用DocumentBuilderFactory类获取解析器。
下面JAXPDOM解析实例:【包括增删改】

> 文档内容<?xml version = "1.0" encoding="GBK"?><students>    <student>        <id>1</id>        <name>王同</name>        <subject>java</subject>        <score>89</score>    </student>    <student>        <id>2</id>        <name>李佳</name>        <subject>sql</subject>        <score>58</score>    </student></students>
    /**     * 解析xml文件,并放入集合当中     * 解析步骤如下:     */    public static void AnalyseXMLdoc() throws Exception {        //创建工厂对象        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();        //创建解析对象        DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();        //解析成DOC        Document document = documentBuilder.parse("src\\scores.xml");        //解析完成,获取根节点 students        Element root = document.getDocumentElement();        //根据根节点对象的获取子节点(student)集合        NodeList nodeList = root.getElementsByTagName("student");        //用于存储节点元素        List<Student> stuList = new ArrayList<>();        //遍历该集合获取孙节点        for (int i = 0; i < nodeList.getLength(); i++) {            //获取每一个孙节点            Element element = (Element)nodeList.item(i);            //得到孙节点元素集合,但是因为每个孙节点只有一个ID所以就只获取第一个            Element idEle = (Element) element.getElementsByTagName("id").item(0);            Element nameEle = (Element) element.getElementsByTagName("name").item(0);            Element subjEle = (Element) element.getElementsByTagName("subject").item(0);            Element scoEle = (Element) element.getElementsByTagName("score").item(0);            //获取每个元素文本内容,转换成对应数据类型            int Id = Integer.parseInt(idEle.getTextContent());            String name = nameEle.getTextContent();            String subject = subjEle.getTextContent();            int score = Integer.parseInt(scoEle.getTextContent());//          System.out.println(Id+name+subject+score);            Student student = new Student(Id, name, subject, score);            stuList.add(student);        }        System.out.println(list);    }//end anl -method

追加子孙元素,删除孙元素,更新元素内容

/** * 在xml文件中添加子孙元素,删除孙元素,更新元素 *  */    public static void editElement() throws Exception {        //创建工厂对象,        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();        //获取解析对象        DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();        //解析xml文件        Document document = documentBuilder.parse("src\\scores.xml");        //获取根节点        Element root = document.getDocumentElement();    /**     * 创建新元素     */             Element bookEle = document.createElement("student");        //创建并设置孙元素内容,同样是使用文档对象        Element idEle = document.createElement("id");        idEle.setTextContent("3");        Element nameEle = document.createElement("name");        nameEle.setTextContent("莉莉");        Element subEle = document.createElement("subject");        subEle.setTextContent("人工智能");        Element scoEle = document.createElement("score");        scoEle.setTextContent("98");        //在根据元素关系进行添加        bookEle.appendChild(idEle);        bookEle.appendChild(nameEle);        bookEle.appendChild(subEle);        bookEle.appendChild(scoEle);        root.appendChild(bookEle);    /**     *  更新元素     */     //根据跟节点获取需要更新的节点元素,调用设置文本内容的方法更新        Element nameEle = (Element) root.getElementsByTagName("name").item(0);        nameEle.setTextContent("王同同");    /**     *  删除指定孙建点     */        //获取("name")孙节点集合        NodeList nodeList = document.getElementsByTagName("name");        //指定第几个子节点        Node firstName = nodeList.item(0);        //获取父节点删除子节点        firstName.getParentNode().removeChild(firstName);    /*以上更新还只有在内存中更新,并未存进硬盘当中,所以我们需要如下步骤存进硬盘*/        //创建转换工厂:        TransformerFactory transformerFactory = TransformerFactory.newInstance();        //创建转换器        Transformer transformer = transformerFactory.newTransformer();        //设置输出格式        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("src\\scores.xml"), "GBK");        //转换        transformer.transform(new  DOMSource(document), new StreamResult(osw));        System.out.println("append succeed!");    }//end addE-method