import java.io.File; import java.io.*; import java.util.*; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.dom4j.DocumentException; /** * @author Holen Chen */ public class Work { public Work() { } /** * 建立一个XML文档,文档名由输入参数决定 * @param filename 需建立的文件名 * @return 返回操作结果, 0表失败, 1表成功 */ public int createXMLFile(String filename) { /** 返回操作结果, 0表失败, 1表成功 */ int returnValue = 0; /** 建立document对象 */ Document document = DocumentHelper.createDocument(); /** 建立XML文档的根dates */ Element booksElement = document.addElement("dates"); /** 加入一行注释 */ booksElement.addComment("This is a test workDate, 2004.11.18"); /** 加入第一个workday节点 */ Element bookElement = booksElement.addElement("workday"); /** 加入day节点 */ Element titleElement = bookElement.addElement("day"); /** 设置属性 */ titleElement.addAttribute("flag", "yes"); /** 为title设置内容 */ titleElement.setText("2004-11-16"); /** 类似的完成后两个book bookElement = booksElement.addElement("book"); bookElement.addAttribute("show","yes"); titleElement = bookElement.addElement("title"); titleElement.setText("Lucene Studing"); bookElement = booksElement.addElement("book"); bookElement.addAttribute("show","no"); titleElement = bookElement.addElement("title"); titleElement.setText("Lucene in Action"); 加入owner节点 Element ownerElement = booksElement.addElement("owner"); ownerElement.setText("O'Reilly"); ****************/ try { /** 将document中的内容写入文件中 */ XMLWriter writer = new XMLWriter(new FileWriter(new File(filename))); writer.write(document); writer.close(); /** 执行成功,需返回1 */ returnValue = 1; } catch (Exception ex) { ex.printStackTrace(); } return returnValue; } /** * 修改XML文件中内容,并另存为一个新文件 * 重点掌握dom4j中如何添加节点,修改节点,删除节点 * @param filename 修改对象文件 * @param newfilename 修改后另存为该文件 * @return 返回操作结果, 0表失败, 1表成功 */ public int ModiXMLFile(String filename, String newfilename) { int returnValue = 0; try { SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new FileReader(new File(filename))); /** 修改内容之一: 如果book节点中show参数的内容为yes,则修改成no */ /** 先用xpath查找对象 */ List list = document.selectNodes("/dates/workday/day/@flag"); Iterator iter = list.iterator(); while (iter.hasNext()) { Attribute attribute = (Attribute) iter.next(); if (attribute.getValue().equals("yes")) { attribute.setValue("no"); } } /** * 修改内容之二: * 并在workday节点中加入day节点,day节点的内容为2004-11-17,还为day节点添加一个参数flag */ list = document.selectNodes("/dates/workday"); iter = list.iterator(); if (iter.hasNext()) { Element workdayElement = (Element) iter.next(); //ownerElement.setText("Tshinghua"); Element dayElement = workdayElement.addElement("day"); dayElement.setText("2004-11-17"); dayElement.addAttribute("flag", "false"); } /** 修改内容之三: 若day内容为2004-11-16,则将属性falg设为false */ list = document.selectNodes("/dates/workday"); iter = list.iterator(); while (iter.hasNext()) { Element workdayElement = (Element) iter.next(); Iterator iterator = workdayElement.elementIterator("day"); while (iterator.hasNext()) { Element dayElement = (Element) iterator.next(); if (dayElement.getText().equals("2004-11-16")) { List list1 = dayElement.attributes(); Iterator iter1 = list1.iterator(); while (iter1.hasNext()) { Attribute attribute = (Attribute) iter1.next(); attribute.setValue("kkkkkkkkkkk"); } } } } try { /** 将document中的内容写入文件中 */ XMLWriter writer = new XMLWriter(new FileWriter(new File(newfilename))); writer.write(document); writer.close(); /** 执行成功,需返回1 */ returnValue = 1; } catch (Exception ex) { ex.printStackTrace(); } } catch (Exception ex) { ex.printStackTrace(); } return returnValue; } /** * 格式化XML文档,并解决中文问题 * @param filename * @return */ public int formatXMLFile(String filename) { int returnValue = 0; try { SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new FileReader(new File(filename))); XMLWriter output = null; /** 格式化输出,类型IE浏览一样 */ OutputFormat format = OutputFormat.createPrettyPrint(); /** 指定XML字符集编码 */ format.setEncoding("GBK"); output = new XMLWriter(new FileWriter(new File(filename)), format); output.write(document); output.close(); /** 执行成功,需返回1 */ returnValue = 1; } catch (Exception ex) { ex.printStackTrace(); } return returnValue; } /** * create one XML of file * @param holiday String[] * @param workday String[] * @param filename String filename OF XML */ public void createXML(String[] holiday,String[] workday, String filename) { Document document = DocumentHelper.createDocument(); Element booksElement = document.addElement("dates"); for (int i = 0; i < holiday.length; i++) { Element bookElement = booksElement.addElement("holiday"); bookElement.addAttribute("flag", "yes"); bookElement.setText(holiday[i]); } for (int i = 0; i < workday.length; i++) { Element bookElement = booksElement.addElement("holiday"); bookElement.addAttribute("flag", "no"); bookElement.setText(workday[i]); } try { XMLWriter writer = new XMLWriter(new FileWriter(new File(filename))); writer.write(document); writer.close(); } catch (Exception ex) { ex.printStackTrace(); } } public HashMap getXMLElement(String filename) throws FileNotFoundException, DocumentException { HashMap hs=new HashMap(); SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new FileReader(new File(filename))); Element root=document.getRootElement(); List list=root.elements("holiday"); if(list.isEmpty()){ return null; }else{ Iterator it=list.iterator(); while(it.hasNext()){ Element holiday=(Element)it.next(); hs.put(holiday.getTextTrim(),holiday.attribute("flag").getValue()); } return hs; } } }