dom4j的简单应用
在做一个进销存项目,底层存储结构由原先的Mysql改为了直接用xml来存,所以特意去学了一下dom4j的一些使用方法。
可能一些例子会借用网上已流传开来的代码,毕竟挺适合入门的。
先贴代码吧。
上面是网上的一些代码例子,我自已是理解了,然后重新敲了一遍。体会是dom4j在读写操作xml方面还是挺不错的,生成xml文件实际是一个建树的过程,一个node一个node的接上去,然后对每个node加上一些属性,数值。最终会建成一颗只有一个根结点的树。当建好树,你想写入到真正的文件中时,如有中文,可以格式化一下文档对像,有两种排列文式可以让你选技,当然,不同版本的DOM4J可能有不同的外插件实现更多的人性化功能,而我觉得本身它最终的开发版功能已经足够了。
而对xml文件进行读取的时候,实际上是一个反向过程,它提供了XPATH等快速定位结点的功能,再结合一系列的迭代方法,相信你可以很快的找到你想要的结点,进而对它进行修改,删除等一系列操作。
下面贴出我写的一个添加表单的方法,以供大家学习。/** * 以清单号来查询数据 * @param number * @return */public Object SelectByNumber(String number){SAXReader reader = new org.dom4j.io.SAXReader();Document document;try {document = reader.read(new File("rc/借出单.xml"));Element rootElement = document.getRootElement();Iterator iter = rootElement.elementIterator();while(iter.hasNext()){Element infoElement = (Element)iter.next();if(infoElement.attributeValue("借卖单号").equals(number)){//取数据}}} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}/** * 保存修改后的清单 * @param boj */public void SaveGoodsList(Object obj,String number){SAXReader reader = new org.dom4j.io.SAXReader();Document document;try {document = reader.read(new File("rc/借卖单.xml"));Element rootElement = document.getRootElement();Iterator iter = rootElement.elementIterator();while(iter.hasNext()){Element infoElement = (Element)iter.next();if(infoElement.attributeValue("借卖单号").equals(number)){//移除该结点,利用add方法加入新结点document.remove(infoElement);AddMarginSellingList(obj);}}OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("GBK");XMLWriter writer = new XMLWriter(new FileWriter(new File("rc/借卖单.xml")),format);writer.write(document);writer.close();} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** * 以清单号来删除某一清单 * @param obj * @param number */public void DelGoodsList(String number){SAXReader reader = new org.dom4j.io.SAXReader();Document document;try {document = reader.read(new File("rc/借卖单.xml"));Element rootElement = document.getRootElement();Iterator iter = rootElement.elementIterator();while(iter.hasNext()){Element infoElement = (Element)iter.next();if(infoElement.attributeValue("借卖单号").equals(number)){//移除该结点,利用add方法加入新结点System.out.println(infoElement.getName());rootElement.remove(infoElement);}}OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("GBK");XMLWriter writer = new XMLWriter(new FileWriter(new File("rc/借卖单.xml")),format);writer.write(document);writer.close();} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}