XML 的 RUD

xml

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

时间: 2024-11-03 13:41:49

XML 的 RUD的相关文章

PHP遍历XML文档所有节点的方法

 这篇文章主要介绍了PHP遍历XML文档所有节点的方法,实例分析了php操作XML文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了PHP遍历XML文档所有节点的方法.分享给大家供大家参考.具体实现方法如下: 1. contact.xml代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 <contact id="43956"> <personal> <name> <first>J</fir

PHP往XML中添加节点的方法

 这篇文章主要介绍了PHP往XML中添加节点的方法,涉及php操作XML文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了PHP往XML中添加节点的方法.分享给大家供大家参考.具体方法如下: 1. contacts.xml代码 代码如下: <contact id="43956"> <personal> <name> <first>J</first> <middle>J</middl

vs2010新建项目是表如下图的错误怎么解决?按图中的路径寻找不到activitylog.xml

问题描述 vs2010新建项目是表如下图的错误怎么解决?按图中的路径寻找不到activitylog.xml

用asp.net和xml做的新闻更新系统(3)

asp.net|xml 最后,大家来看一下最负责的一个页面,这个页面的作用就是用来建立新的xml数据. manage.aspx </P><P><%@ Import Namespace="System.Xml.Xsl" %> <%@ Import Namespace="System.Xml" %> <%@ Assembly Name="System.Xml" %> <%@ Impor

logback.xml

<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender&quo

使用 Oracle XQuery 查询、构建和转换 XML

oracle|xml|转换 在 Oracle 数据库 10g 第 2 版中,Oracle 引入了一个与该数据库集成的全功能自带 XQuery 引擎,该引擎可用于完成与开发支持 XML 的应用程序相关的各种任务.XQuery 是一种用于处理 XML 数据模型的查询语言,它实际上可操作任何类型的可用 XML 表达的数据.尽管 Oracle XQuery 实施使您可以使用数据库数据和外部数据源,但在处理数据库中存储的结构化数据方面,Oracle XML DB 通常可以显著提高性能. 本文提供的示例不仅

js与xml交互理论和示例

---------------------------------------------------js+xml--------------------------------------------------------------------------- DOM2级在 document.implementation 中引入了 createDocument() 方法. IE9+. Firefox. Opera. Chrome 和 Safari 都支持这个方法. 想一想, 或许你还记得可以

JSP与XML的结合

js|xml 综述:可扩展标注语言(eXtensible Markup Language,XML)正被迅速的运用于业界,它已作为与平台.语言和协议无关的格式描述和交换数据的广泛应用标准.XML和它的辅助规范可用于描述数据的文档表现,描述XML文档类型的限制,描述XML文档和资源之间的链接,描述XML文档的自动转换和格式化. 如何开发自定义标签库? 我使用JSP和ASP编程已经有一段颇长的时间了,在两种服务器端的编程方式中,我越来越觉得JSP的功能要强大得多.不提别的,其中JSP的标签库就是我选择

unbound prefix-android 编写主题xml时报错

问题描述 android 编写主题xml时报错 <resources> <style name="AppBaseTheme" parent="android:Theme.Light"> </style> <style name="AppTheme" parent="AppBaseTheme"> <item android:name="android:windowN