本站首页    管理页面    写新日志    退出


«February 2026»
1234567
891011121314
15161718192021
22232425262728


公告
暂无公告...

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:29
评论数量:19
留言数量:0
访问次数:118532
建立时间:2006年5月29日




[java与xml]利用JDOM对xml实现增删改查的java应用程序实现笔记(二)
软件技术

krf301 发表于 2006/5/30 14:32:40

对WWWroot.xml进行处理: <?xml version="1.0" encoding="UTF-8"?><网址>  <常用网站>    <搜狐>http://www.sohu.com</搜狐>    <百度>http://www.baidu.com</百度>      </常用网站>  <软件>    <汉化网站>http://www.hanzify.org</汉化网站>    <华军网站>http://www.newhua.com</华军网站>     </软件>  <Blog>    <陈勇的BLOG>http://www.i7766.com/blog/my/krf301/</陈勇的BLOG>      </Blog> </网址> 进行分析后用三个类和一个接口来表示其结构:RootWjj.java;WjjEntity.java;WzEntity.java;ITreeEntry.java //RootWjj.java,记录整个网址信息 package cn.com.javachen.myxml.wz; import java.util.List; public class RootWjj implements ITreeEntry { private String name;  private List wjjs;// 文件夹对象集合  public String getName() {  return name; }  public void setName(String name) {  this.name = name; }  public List getChildren() {  return wjjs; }  public void setChildren(List children) {  this.wjjs = children; } } //...........WjjEntity.java,记录文件夹信息package cn.com.javachen.myxml.wz; import java.util.List; public class WjjEntity implements ITreeEntry {   private String name;  private List wzs;// 网址集合,集合对象为Wz   public String getName() {  return name; }  public void setName(String name) {  this.name = name; }  public void setChildren(List children) {  this.wzs = children; }  public List getChildren() {  return this.wzs; }} //....WzEntity.java,记录每一个站点信息package cn.com.javachen.myxml.wz; import java.util.List; public class WzEntity implements ITreeEntry {  private String name;  private String path;  public WzEntity(String name, String path) {  this.name = name;  this.path = path; }    public String getName() {  return name; }  public void setName(String name) {  this.name = name; }  public String getPath() {  return path; }  public void setPath(String path) {  this.path = path; }  public void setChildren(List children) {  // TODO 自动生成方法存根  }  public List getChildren() {  // TODO 自动生成方法存根  return null; } } //ITreeEntry.java,为抽取的共用接口,可以不用。 package cn.com.javachen.myxml.wz; import java.util.List;   public interface ITreeEntry { public String getName();  public void setName(String name);  public void setChildren(List children);  public List getChildren();} 发现xml文件内容的结构对于用jdom实现读到对象存放时有一点难度: 于是对WWWroot.xml作了一点改进; <?xml version="1.0" encoding="UTF-8"?><网址>  <文件夹 name="常用网站">    <站点 name="搜狐">http://www.sohu.com</站点>    <站点 name="百度">http://www.baidu.com</站点>      </文件夹>  <文件夹 name="软件">    <站点 name="汉化网站">http://www.hanzify.org</站点>    <站点 name="华军网站">http://www.newhua.com</站点>     </文件夹>  <文件夹 name="Blog">    <站点 name="陈勇的BLOG">http://www.i7766.com/blog/my/krf301</站点>      </文件夹> </网址> 这样一来,编程上看似已经简单多了:下面给出对xml读出数据存放于三个类的对像里面:(用"//"的是一开始的调试信息,最后可以全去掉) package cn.com.javachen.myxml.wz; import java.io.FileInputStream;import java.io.FileOutputStream; import java.util.ArrayList;import java.util.Iterator;import java.util.List; import org.jdom.Attribute;import org.jdom.Document;import org.jdom.Element;import org.jdom.input.SAXBuilder;import org.jdom.output.XMLOutputter; public class WzXml { private RootWjj rootWjj;  private WjjEntity wjjEntity;  private WzEntity wzEntity;  // private List wjjEntiys; // private List wzEntitys; // private String RootName,wjjName,wzName,htt; //  //  // public String getRootName() { // return RootName; // } // public void setRootName(String rootName) { // RootName = rootName; // } // public String getHtt() { // return htt; // } // public void setHtt(String htt) { // this.htt = htt; // } //  // public String getWjjName() { // return wjjName; // } // public void setWjjName(String wjjName) { // this.wjjName = wjjName; // } // public String getWzName() { // return wzName; // } // public void setWzName(String wzName) { // this.wzName = wzName; // } public WzXml() {  }  public void LoadRootXML(String path) throws Exception {  rootWjj = new RootWjj();  // WzXml xml=new WzXml();  FileInputStream fi = null;  try {   fi = new FileInputStream(path);   SAXBuilder sb = new SAXBuilder();   Document doc = sb.build(fi);   Element root = doc.getRootElement(); // 得到根元素    rootWjj.setName(root.getName());   // xml.setRootName(root.getName());   List wjjs = root.getChildren(); // 得到根元素所有子元素的集合   List wzs = null;   Element wjj = null;   Element zhandian = null;   // System.out.println(xml.getRootName());   List wjjEntiys = new ArrayList();   for (int i = 0; i < wjjs.size(); i++) {    // System.out.println("............");    wjj = (Element) wjjs.get(i); // 得到第一文件夹元素    wjjEntity = new WjjEntity();    wjjEntity.setName(wjj.getAttributeValue("name"));    wzs = wjj.getChildren();    // xml.setWjjName(wjj.getAttributeValue("name"));    // System.out.println("文件夹:"+xml.getWjjName());    List wzEntitys = new ArrayList();    for (int j = 0; j < wzs.size(); j++) {     zhandian = (Element) wzs.get(j);     // xml.setWzName(zhandian.getAttributeValue("name"));     // xml.setHtt(zhandian.getText());     // System.out.println("站点名:"+xml.getWzName());     // System.out.println("网站名:"+xml.getHtt());     wzEntity = new WzEntity(zhandian.getAttributeValue("name"),       zhandian.getText());     wzEntitys.add(wzEntity);     }    wjjEntity.setChildren(wzEntitys);    wjjEntiys.add(wjjEntity);    }   rootWjj.setChildren(wjjEntiys);  } catch (Exception e) {   System.err.println(e + "error");  } finally {   try {    fi.close();   } catch (Exception e) {    e.printStackTrace();   }  }  }  /**  * 查找XML文件里面的文件夹name项指定信息  */ public int FindWjjXml(String path, String name) {  WzXml xml = new WzXml();  try {   xml.LoadRootXML(path);  } catch (Exception e) {   // TODO 自动生成 catch 块   e.printStackTrace();  }  int i = 0;  for (Iterator it = xml.rootWjj.getChildren().iterator(); it.hasNext(); i++) {   WjjEntity wjjEntity = (WjjEntity) it.next();   if (wjjEntity.getName().equals(name)) {    return i;   }  }  return -1; }  /**  * 查找XML文件里面的站点name项指定信息  */ public int FindWzXml(String path, String name) {  WzXml xml = new WzXml();  try {   xml.LoadRootXML(path);  } catch (Exception e) {   // TODO 自动生成 catch 块   e.printStackTrace();  }  int i=0;  int j = 0;  for (Iterator it = xml.rootWjj.getChildren().iterator(); it.hasNext();i++) {   WjjEntity wjjEntity = (WjjEntity) it.next();      for (Iterator itt = wjjEntity.getChildren().iterator(); itt     .hasNext(); j++) {    WzEntity wzEntity = (WzEntity) itt.next();    if (wzEntity.getName().equals(name)) {     return j;    }   }  }  return -1; } /**  * 添加XML文件文件夹项指定信息  */ public static void AddWjjXML(String path,WjjEntity wjjEntity) throws Exception {  FileInputStream fi = null;  FileOutputStream fo = null;  try {      fi = new FileInputStream(path);   SAXBuilder sb = new SAXBuilder();   Document doc = sb.build(fi);   Element root = doc.getRootElement(); // 得到根元素   List wjjs = root.getChildren(); // 得到根元素所有子元素的集合   String name=wjjEntity.getName();      Element wjj = new Element("文件夹");        wjj.setAttribute(new Attribute("name",name));      wjjs.add(wjj);// 增加子元素        XMLOutputter outp = new XMLOutputter();   fo = new FileOutputStream(path);   outp.output(doc, fo);  } catch (Exception e) {   System.err.println(e + "error");  } finally {   try {    fi.close();    fo.close();   } catch (Exception e) {    e.printStackTrace();   }  } } /**  * 添加XML文件站点项指定信息  */ public static void AddWzXML(String path,String wjjName,WzEntity wzEntity) throws Exception {  FileInputStream fi = null;  FileOutputStream fo = null;  try {      fi = new FileInputStream(path);   SAXBuilder sb = new SAXBuilder();   Document doc = sb.build(fi);   Element root = doc.getRootElement(); // 得到根元素   List wjjs = root.getChildren(); // 得到根元素所有子元素的集合   WzXml xml=new WzXml();   xml.LoadRootXML(path);   int findWjj=xml.FindWjjXml(path,wjjName);   Element wjj=(Element) wjjs.get(findWjj);   List wzs=wjj.getChildren();   Element wz = new Element("站点");        wz.setAttribute(new Attribute("name",wzEntity.getName()));   wz.addContent(wzEntity.getPath());   wzs.add(wz);// 增加子元素        XMLOutputter outp = new XMLOutputter();   fo = new FileOutputStream(path);   outp.output(doc, fo);  } catch (Exception e) {   System.err.println(e + "error");  } finally {   try {    fi.close();    fo.close();   } catch (Exception e) {    e.printStackTrace();   }  } } /**  * 修改XML文件文件夹项指定信息  */ public static void editWjjXML(String path,String wjjName,String newName) throws Exception {  FileInputStream fi = null;  FileOutputStream fo = null;  try {      fi = new FileInputStream(path);   SAXBuilder sb = new SAXBuilder();   Document doc = sb.build(fi);   Element root = doc.getRootElement(); // 得到根元素   List wjjs = root.getChildren(); // 得到根元素所有子元素的集合   WzXml xml=new WzXml();   xml.LoadRootXML(path);   int findWjj=xml.FindWjjXml(path,wjjName);      Element wjj = (Element) wjjs.get(findWjj);        wjj.setAttribute(new Attribute("name",newName));    XMLOutputter outp = new XMLOutputter();   fo = new FileOutputStream(path);   outp.output(doc, fo);  } catch (Exception e) {   System.err.println(e + "error");  } finally {   try {    fi.close();    fo.close();   } catch (Exception e) {    e.printStackTrace();   }  } } /**  * 修改XML文件站点名wzName项修改为指定信息newWzEntity  */ public static void editWzXML(String path,String wzName,WzEntity newWzEntity) throws Exception {  FileInputStream fi = null;  FileOutputStream fo = null;  try {      fi = new FileInputStream(path);   SAXBuilder sb = new SAXBuilder();   Document doc = sb.build(fi);   Element root = doc.getRootElement(); // 得到根元素   List wjjs = root.getChildren(); // 得到根元素所有子元素的集合   WzXml xml=new WzXml();   xml.LoadRootXML(path);   int findWjj=xml.FindWzXml(path,wzName);    List wzs=null;   Element wjj=null;   Element zhandian=null;   //找到编号为findWjj的站点修改之   int j=0;   for(Iterator it=wjjs.iterator();it.hasNext();){     wjj=(Element) it.next();    wzs=wjj.getChildren();    for(Iterator itt=wzs.iterator();itt.hasNext();j++){     zhandian=(Element) itt.next();     if(j==findWjj){      zhandian.setAttribute(new Attribute("name",newWzEntity.getName()));      zhandian.setText(newWzEntity.getPath());     }    }       }   XMLOutputter outp = new XMLOutputter();   fo = new FileOutputStream(path);   outp.output(doc, fo);  } catch (Exception e) {   System.err.println(e + "error");  } finally {   try {    fi.close();    fo.close();   } catch (Exception e) {    e.printStackTrace();   }  } } /**  * 删除XML文件文件夹项指定信息  */ public static void delWjjXML(String path,String wjjName) throws Exception {  FileInputStream fi = null;  FileOutputStream fo = null;  try {      fi = new FileInputStream(path);   SAXBuilder sb = new SAXBuilder();   Document doc = sb.build(fi);   Element root = doc.getRootElement(); // 得到根元素   List wjjs = root.getChildren(); // 得到根元素所有子元素的集合   WzXml xml=new WzXml();   xml.LoadRootXML(path);   int findWjj=xml.FindWjjXml(path,wjjName);      wjjs.remove(findWjj);        XMLOutputter outp = new XMLOutputter();   fo = new FileOutputStream(path);   outp.output(doc, fo);  } catch (Exception e) {   System.err.println(e + "error");  } finally {   try {    fi.close();    fo.close();   } catch (Exception e) {    e.printStackTrace();   }  } } /**  * 删除XML文件站点名wzName项指定信息  */ public static void delWzXML(String path,String wzName) throws Exception {  FileInputStream fi = null;  FileOutputStream fo = null;  try {      fi = new FileInputStream(path);   SAXBuilder sb = new SAXBuilder();   Document doc = sb.build(fi);   Element root = doc.getRootElement(); // 得到根元素   List wjjs = root.getChildren(); // 得到根元素所有子元素的集合   WzXml xml=new WzXml();   xml.LoadRootXML(path);   int findWjj=xml.FindWzXml(path,wzName);    List wzs=null;   Element wjj=null;   Element zhandian=null;   //找到编号为findWjj的站点修改之   int j=0;   for(Iterator it=wjjs.iterator();it.hasNext();){     wjj=(Element) it.next();    wzs=wjj.getChildren();    for(Iterator itt=wzs.iterator();itt.hasNext();j++){     zhandian=(Element) itt.next();     if(j==findWjj){      wzs.remove(zhandian);      break;     }    }       }   XMLOutputter outp = new XMLOutputter();   fo = new FileOutputStream(path);   outp.output(doc, fo);  } catch (Exception e) {   System.err.println(e + "error");  } finally {   try {    fi.close();    fo.close();   } catch (Exception e) {    e.printStackTrace();   }  } }  public static void main(String[] args) {  String path = "cn/com/javachen/myxml/wz/WWWroot.xml";  // 读出xml..........................  WzXml xml = new WzXml();  try {   xml.LoadRootXML(path);  } catch (Exception e) {   // TODO 自动生成 catch 块   e.printStackTrace();  }  // 用对象调试的方法  System.out.println("" + xml.rootWjj.getName());  for (Iterator it = xml.rootWjj.getChildren().iterator(); it.hasNext();) {   System.out.println("..................");   WjjEntity wjjEntity = (WjjEntity) it.next();   System.out.println("文件夹:" + wjjEntity.getName());   for (Iterator itt = wjjEntity.getChildren().iterator(); itt     .hasNext();) {    WzEntity wzEntity = (WzEntity) itt.next();    System.out.println("站点名:" + wzEntity.getName());    System.out.println("网站名:" + wzEntity.getPath());   }  }  // 查找name为"Blog"的文件夹//  String name = "Blog";//  int findWjj = xml.FindWjjXml(path, name);//  System.out.println(findWjj);  //查找name为"陈勇的BLOG"网站//  String name1="陈勇的BLOG";//  int findWz=xml.FindWzXml(path,name1);//  System.out.println(findWz);  //增加一文件夹//  WjjEntity wjjEntity=new WjjEntity();//  //  wjjEntity.setName("XML");//  wjjEntity.setChildren(null);//  try {//   WzXml.AddWjjXML(path,wjjEntity);//  //  } catch (Exception e) {//   // TODO 自动生成 catch 块//   e.printStackTrace();//  }  //加一站点//  String name2="XML";//  WzEntity wzEntiry=new WzEntity("Flash","http://www.flash.com");//  try {//   WzXml.AddWzXML(path,name2,wzEntiry);//  } catch (Exception e) {//   // TODO 自动生成 catch 块//   e.printStackTrace();//  }  //改一文件夹//  String wjjName="XML";//  String newName="修改";//  try {//   WzXml.editWjjXML(path,wjjName,newName);//  } catch (Exception e) {//   // TODO 自动生成 catch 块//   e.printStackTrace();//  }  //修改一站点名及内容//  String wzName="Flash";//  WzEntity wz=new WzEntity("Flashbox","http://www.flashbox.com");//  try {//   WzXml.editWzXML(path,wzName,wz);//  } catch (Exception e) {//   // TODO 自动生成 catch 块//   e.printStackTrace();//  }  //删除一文件夹及子项内容//  String delName="XML";//  try {//   WzXml.delWjjXML(path,delName);//  } catch (Exception e) {//   // TODO 自动生成 catch 块//   e.printStackTrace();//  }  //删除一站点内容//  String delName="Flash1";//  try {//   WzXml.delWzXML(path,delName);//  } catch (Exception e) {//   // TODO 自动生成 catch 块//   e.printStackTrace();//  } } }main()方法里面的增删改查全通过调试。虽然注释了,但均为可用代码。 里面打印结果为: 网址..................文件夹:常用网站站点名:搜狐网站名:http://www.sohu.com站点名:百度网站名:http://www.baidu.com..................文件夹:软件站点名:汉化网站网站名:http://www.hanzify.org站点名:华军网站网站名:http://www.newhua.com..................文件夹:Blog站点名:陈勇的BLOG网站名:http://www.i7766.com/blog/my/krf301站点名:Flashbox网站名:http://www.flashbox.com..................文件夹:娱乐..................文件夹:XML站点名:Flash1网站名:1http://www.flash.com


阅读全文(1827) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.648 second(s), page refreshed 144808804 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号