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

openkk 13年前

由于同学的毕设的问题,让我给她写个对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();                }            }  
讲解,到此完毕,主要是代码,很简单。如果有什么问题,请大家提出来!!!

转自:http://blog.csdn.net/vipygd/article/details/7584077