在工作中使用 XML 已經很長時間了,不過長久以來都是進行的讀操作,或者在生成 XML 時完全使用 StringBuffer 來構造。進行完整的讀取、添加、刪除、修改還是最近的事情。在這里我采用的是 DOM4J,其實呢這些內容都很簡單,如果愿意,各位大可直接參考官方的 Cookbook(http://www.dom4j.org/cookbook.html)和 Quick Start(http://www.dom4j.org/guide.html)。
對于給定的 XML 文件,其結構如下:
<?xml version="1.0" encoding="GBK" ?> <propertysets> <propertset name="rea_faculty" description="team"> |
為以上 XML 文件構造 Propertys 類:
public class Propertys { private String name; private String description; private String field; public String getDescription() { public void setDescription(String description) { public String getField() { public void setField(String field) { public String getName() { public void setName(String name) { |
讀取方法(返回包含 Propertys 的列表):
public List getAll() { List list = new ArrayList(); try { InputStream is = getClass().getResourceAsStream("/navigation.xml"); SAXReader reader = new SAXReader(); Document document = reader.read(is); Element root = document.getRootElement(); Iterator lv = root.elementIterator("propertset"); Element el = null; while (lv.hasNext()) { Propertys property=new Propertys(); el = (Element) lv.next(); property.setName(el.attributeValue("name")); property.setDescription(el.attributeValue("description")); property.setField(el.elementText("field")); list.add(property); } } catch (Exception e) { e.printStackTrace(); } return list; } |
添加新節點(成功返回 1 否則 0):
public int saveProperty(Propertys property) { try { InputStream is = getClass().getResourceAsStream("/navigation.xml"); SAXReader reader = new SAXReader(); Document document = reader.read(is); Element root = document.getRootElement(); root.addElement("propertset") .addAttribute("name",property.getName()) .addAttribute("description",property.getDescription()) .addElement("field").addText(property.getField()); OutputFormat outformat = OutputFormat.createPrettyPrint(); outformat.setEncoding("GBK"); FileWriter out = new FileWriter( System.getProperty("user.dir") +"/web/WEB-INF/classes/navigation.xml"); XMLWriter writer=new XMLWriter(out,outformat); writer.write(document); writer.close(); return 1; } catch (Exception e) { e.printStackTrace(); } return 0; } |
更新節點(按照 name 屬性查找):
public int updateProperty(String pro,Propertys property) { try { InputStream is = getClass().getResourceAsStream("/navigation.xml"); SAXReader reader = new SAXReader(); Document document = reader.read(is); Element root = document.getRootElement(); Iterator lv = root.elementIterator("propertset"); Element el = null; while (lv.hasNext()) { el = (Element) lv.next(); if (el.attributeValue("name").equals(pro)) { el.setAttributeValue("name",property.getName()); el.setAttributeValue("description",property.getDescription()); el.element("field").setText(property.getField()); } } OutputFormat outformat = OutputFormat.createPrettyPrint(); |
刪除節點:
public int delProperty(String pro) { try { InputStream is = getClass().getResourceAsStream("/navigation.xml"); SAXReader reader = new SAXReader(); Document document = reader.read(is); Element root = document.getRootElement(); Iterator lv = root.elementIterator("propertset"); Element el = null; while (lv.hasNext()) { el = (Element) lv.next(); if (el.attributeValue("name").equals(pro)) { el.detach(); } } OutputFormat outformat = OutputFormat.createPrettyPrint(); |
請注意!引用、轉貼本文應注明原作者:Rosen Jiang 以及出處:http://www.aygfsteel.com/rosen