使用Dom4j对XML文件的各种操作
由于同学的毕设的问题,让我给她写个对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