在工作中使用 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"><field>10290</field>
 </propertset>
 <propertset name="faculty_lea" description="another team">
 <field>10286</field>
 </propertset>
 <propertset name="office" description="teams">
 <field>10287</field>
 </propertset>
 
 </propertysets>
 | 
    
为以上 XML 文件构造 Propertys 类:
| public class Propertys { 
 private String name;
 private String description;
 private String field;
  public String getDescription() {return description;
 }
  public void setDescription(String description) {this.description = description;
 }
  public String getField() {return field;
 }
  public void setField(String field) {this.field = field;
 }
  public String getName() {return name;
 }
  public void setName(String name) {this.name = 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();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;
 }
 | 
删除节点:
    
| 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();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;
 }
 | 
请注意!引用、转贴本文应注明原作者:Rosen Jiang 以及出处:http://www.blogjava.net/rosen