| « | February 2026 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | |
| 公告 |
| 暂无公告... |
| 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 |
|
|