现在的位置: 首页 > 综合 > 正文

使用Dom4j对XML文件的各种操作

2019年06月10日 ⁄ 综合 ⁄ 共 4154字 ⁄ 字号 评论关闭

由于同学的毕设的问题,让我给她写个对XML文件的操作的代码;还好,这里自己很熟悉;这么晚了,就把自己对Dom4j对XML文件的操作的一些心得写上来和大家分享。至于如何导入Dom4j的jar包,就不讲了。直接进入重点:

由于Dom4j采用面向接口方式编程,因此程序在处理XML解析时更加灵活,而且由于Dom4j实质上是以其他XML解析器为基础的,采用面向接口编程的方式将允许Dom4j的底层在不同的解析机制之间自由转换;

首先建立一个XML文件:


由于同学的毕设的问题,让我给她写个对XML文件的操作的代码;还好,这里自己很熟悉;这么晚了,就把自己对Dom4j对XML文件的操作的一些心得写上来和大家分享。至于如何导入Dom4j的jar包,就不讲了。直接进入重点:

/*
     * 建立xml文件,并写入根节点
     */
    void createXML() {
        // 如果文件存在则不建立xml文件
        File file = new File(documentName);
        if (file.exists()) {
            return;
        }
        DocumentFactory factory = new DocumentFactory();
        Document document = factory.createDocument();
        
        // 建立根节点
        document.addElement(rootName);
        
        // 建立一个xml文件,将Dom4j树写入xml文件
        try {
            FileWriter fw = new FileWriter(documentName);
            XMLWriter writer = new XMLWriter(fw);
            writer.write(document);
            fw.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

根据提供的文件名和根节点建立一个XML文件;建立以个DOM树,然后将这个DOM树写入到文件中;

以下是实现XML文件的增、删、改、查功能,代码如下:

/*
     * 新添打折宾馆信息
     */
    public void addHotel(String id, String price, String name, String address, 
            String beginTime, String endTime) {
        SAXReader reader = new SAXReader();
        reader.setStripWhitespaceText(true);
        try {
            Document document = reader.read(new File(documentName));

            // 获取根节点
            Element root = document.getRootElement();

            // 添加一个新的hotel节点
            Element hotel = root.addElement("hotel");

            // 添加和设置新hotel节点信息
            hotel.addAttribute("id", id);
            Element priceElement = hotel.addElement("price");
            Element nameElement = hotel.addElement("name");
            Element addressElement = hotel.addElement("address");
            Element beginTimeElement = hotel.addElement("beginTime");
            Element endTimeElement = hotel.addElement("endTime");
            priceElement.setText(price);
            nameElement.setText(name);
            addressElement.setText(address);
            beginTimeElement.setText(beginTime);
            endTimeElement.setText(endTime);
            FileWriter fw = new FileWriter(documentName);
            XMLWriter writer = new XMLWriter(fw);
            writer.write(document);
            fw.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }

    /*
     * 根据宾馆呢id,查找宾馆打折信息
     */
    String[] queryHotel(String id) {
        SAXReader reader = new SAXReader();
        String[] queryResult = new String[6];
        int index = 0;

        try {
            Document document = reader.read(new File(documentName));

            // 获取根节点
            Element root = document.getRootElement();

            // 获取根节点包含的所有子节点
            List nodes = root.elements();
            Element e;
            List sunNodes;
            Element sunE;
            for (Object element : nodes) {
                e = (Element)element;

                // 如果id值与设定的id值相等,则遍历该节点,获取信息
                if ((e.attribute("id")).getText().equals(id)) {
                    // 获取当前子节点的所有子节点
                    sunNodes = e.elements();
                    queryResult[index++] = id;
                    for (Object sunElement : sunNodes) {
                        sunE = (Element)sunElement;
                        queryResult[index++] = sunE.getTextTrim();
                    }
                    break;
                }
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        return queryResult;
    }

    /*
     * 根据宾馆id,查找相应宾馆,并修改宾馆信息
     */
    void modifyHotel(String id, String price, String name, String address, 
            String beginTime, String endTime) {
        SAXReader reader = new SAXReader();

        try {
            Document document = reader.read(new File(documentName));

            // 获取根节点
            Element root = document.getRootElement();

            // 获取根节点包含的所有子节点
            List nodes = root.elements();
            Element e;
            List sunNodes;
            for (Object element : nodes) {
                e = (Element)element;
                int index = 0;

                // 如果id值与设定的id值相等,则遍历该节点,获取信息
                if ((e.attribute("id")).getText().equals(id)) {
                    // 获取当前子节点的所有子节点
                    sunNodes = e.elements();
                    for (Object sunElement : sunNodes) {
                        if (index == 0) {
                            ((Element)sunElement).setText(price);
                        }
                        if (index == 1) {
                            ((Element)sunElement).setText(name);
                        }
                        if (index == 2) {
                            ((Element)sunElement).setText(address);
                        }
                        if (index == 3) {
                            ((Element)sunElement).setText(beginTime);
                        }
                        if (index == 4) {
                            ((Element)sunElement).setText(endTime);
                        }
                        index++;
                    }
                    break;
                }
            }
            FileWriter fw = new FileWriter(documentName);
            XMLWriter writer = new XMLWriter(fw);
            writer.write(document);
            fw.close();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }

    /*
     * 根据id,删除指定hotel信息
     */
    void deleteHotel(String id) {
        SAXReader reader = new SAXReader();

        try {
            Document document = reader.read(new File(documentName));

            // 获取根节点
            Element root = document.getRootElement();

            // 获取根节点包含的所有子节点
            List nodes = root.elements();
            Element e;
            for (Object element : nodes) {
                e = (Element)element;

                // 如果id值与设定的id值相等,则遍历该节点,获取信息
                if ((e.attribute("id")).getText().equals(id)) {
                    // 删除该节点
                    root.remove(e);
                    break;
                }
            }
            FileWriter fw = new FileWriter(documentName);
            XMLWriter writer = new XMLWriter(fw);
            writer.write(document);
            fw.close();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

讲解,到此完毕,主要是代码,很简单。如果有什么问题,请大家提出来!!!

抱歉!评论已关闭.