成都心情

  BlogJava :: 首页 ::  :: 联系 :: 聚合  :: 管理 ::
  98 随笔 :: 2 文章 :: 501 评论 :: 1 Trackbacks

    在工作中使用 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

posted on 2005-08-12 15:42 Rosen 阅读(1185) 评论(3)  编辑  收藏 所属分类: Java EE 服务器端

评论

# re: XML 的 RUD 2006-09-19 21:14 暂伴月将影
你的BLOG内容很有深度,很想仔细的读读,我想肯定会有不少的启发。
就是你左边怎么带了个广告,能不能去掉呀?因为影响阅读,或者你能不能把广告的图片设小一点。
谢谢!  回复  更多评论
  

# re: XML 的 RUD 2006-09-20 09:25 zx
写得不错,目前我还用不上:P,收藏先!  回复  更多评论
  

# re: XML 的 RUD 2008-09-08 16:45 Rosen
这篇文章很有问题,连import也不写,前几年的风格不好。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: