分别用DOM和JDOM实现XML读写

jdom用来实现xml读写比用传统的dom方便专业多了。以下是dom实现的:
[code]import javax.xml.parsers.*;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.*;
import org.xml.sax.SAXException;

import java.io.*;

public class XmlOperate{
//Document doc;



public XmlOperate() {
System.out.println("XmlOperate init!");
}

/**
* @param args
* @throws ParserConfigurationException
* @throws IOException
* @throws SAXException
*/

public synchronized LocalCrl readinObj_ID(String id)//根据ID对XML文件查询,返回一个LocalCrl对象
throws ParserConfigurationException, SAXException, IOException {// 根据ID查询
LocalCrl obj = null;//将obj初始化为null
// 得到DOM解析器的工厂实例
DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
// 从DOM工厂获得DOM解析器
DocumentBuilder builder = dbfactory.newDocumentBuilder();
Document doc = builder.parse(new File("local.xml"));
Element root = doc.getDocumentElement();//获得XML文档的根节点
//System.out.println("根节点标记名:" + root.getTagName());
NodeList list = root.getElementsByTagName("crl");//获得crl节点列表
for (int i = 0; i < list.getLength(); i++) {//遍历整个列表
Element element = (Element) list.item(i);
// System.out.println(element.getAttribute("dbid"));
if (id.equals(element.getAttribute("dbid"))) {//找到指定ID的节点,最后跳出循环
obj=new LocalCrl();//实例化
obj.setDbid(id);
for (Node node = element.getFirstChild(); node != null; node = node
.getNextSibling()) {//获得子节点属性值
if (node.getNodeName().equals("name")) {
String name=node.getFirstChild().getNodeValue();
obj.setName(name);
}
if (node.getNodeName().equals("version")) {
String version=node.getFirstChild().getNodeValue();
obj.setVersion(version);
}
if (node.getNodeName().equals("md5")) {
String md5=node.getFirstChild().getNodeValue();
obj.setMd5(md5);
}
}
break;
}
}
return obj;
}

public synchronized void addnewObj(LocalCrl newObj){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {//判断XML是否已经存在该节点
LocalCrl isexist=readinObj_ID(newObj.getDbid());
if(isexist!=null){
System.out.println("要添加的节点已经存在"+System.currentTimeMillis());
return;
}
} catch (ParserConfigurationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SAXException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// 得到DOM解析器的工厂实例
DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
// 从DOM工厂获得DOM解析器
DocumentBuilder builder;
Document doc=null;
try {
builder = dbfactory.newDocumentBuilder();
try {
doc = builder.parse(new File("local.xml"));
} catch (SAXException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
} catch (ParserConfigurationException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}

Element root =doc.getDocumentElement(); //获得根节点
Element crl=doc.createElement("crl");//创建新的crl元素
crl.setAttribute("dbid", newObj.getDbid());
Element name=doc.createElement("name");
name.appendChild(doc.createTextNode(newObj.getName()));
Element version=doc.createElement("version");
version.appendChild(doc.createTextNode(newObj.getVersion()));
Element md5=doc.createElement("md5");
md5.appendChild(doc.createTextNode(newObj.getMd5()));
crl.appendChild(name);
crl.appendChild(version);
crl.appendChild(md5);
root.appendChild(crl);

// 创建转换工厂,将结果写回到xml中去
TransformerFactory tf = TransformerFactory.newInstance();
Transformer trans;
try {
trans = tf.newTransformer();
try {
trans.transform(new DOMSource(doc),new StreamResult(new File("local.xml")));
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("添加新节点成功"+System.currentTimeMillis());
}

public synchronized void deleteObj_ID(String id){
try {//判断XML是否已经存在该节点
LocalCrl isexist=readinObj_ID(id);
if(isexist==null){
System.out.println("要删除的节点不存在!"+System.currentTimeMillis());
return;
}
} catch (ParserConfigurationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SAXException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// 得到DOM解析器的工厂实例
DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
// 从DOM工厂获得DOM解析器
DocumentBuilder builder;
Document doc=null;
try {
builder = dbfactory.newDocumentBuilder();
try {
doc = builder.parse(new File("local.xml"));
} catch (SAXException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
} catch (ParserConfigurationException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}


Element root=doc.getDocumentElement();
NodeList nodelist=root.getElementsByTagName("crl");
for(int i=0;i<nodelist.getLength();i++){
Element element=(Element)nodelist.item(i);
if(id.equals(element.getAttribute("dbid"))){
Node node=nodelist.item(i);
root.removeChild(node);
// 创建转换工厂,将结果写回到xml中去
TransformerFactory tf = TransformerFactory.newInstance();
Transformer trans;
try {
trans = tf.newTransformer();
try {
trans.transform(new DOMSource(doc),new StreamResult(new File("local.xml")));
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
System.out.println("删除节点成功"+System.currentTimeMillis());
}

public void deleteObj(LocalCrl old){
deleteObj_ID(old.getDbid());
}


}
[/code]
JDom实现:
[code]
import java.io.*;
import java.util.ArrayList;
import java.util.List;

import org.jdom.*;
import org.jdom.input.SAXBuilder;

import org.jdom.output.XMLOutputter;


public class XmlOperate {
Document doc;//

File Xmlfile;//操作的xml文件

class dbidNullException extends Exception {//查询的dbid为空时抛出的异常

private static final long serialVersionUID = 1L;

public dbidNullException() {

}

}

public XmlOperate(File xmlfile) {

Xmlfile = xmlfile;
if(!Xmlfile.exists()){//文件不存在时抛出异常
try {
throw new FileNotFoundException();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
SAXBuilder sb = new SAXBuilder();
try {
doc = sb.build(Xmlfile);
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}


public synchronized LocalCrl readinObj_ID(String dbid)// 根据ID对XML文件查询,返回一个LocalCrl对象
{// 根据ID查询
/*
*
*/
if (dbid == null) {//dbid为空时抛出异常
try {
throw new dbidNullException();
} catch (dbidNullException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
LocalCrl obj = null;// 将obj初始化为null
Element root = doc.getRootElement();//获得根节点
List list = root.getChildren("crl");//获得所有crl元素
for (int i = 0; i < list.size(); i++) {
Element element = (Element) list.get(i);
if (dbid.equals(element.getAttributeValue("dbid"))) {//匹配时获得crl所有属性,并实例化LocalCrl
obj = new LocalCrl();
obj.setDbid(dbid);
Element name = element.getChild("name");
obj.setName(name.getText());
Element version = element.getChild("version");
obj.setVersion(version.getText());
Element md5 = element.getChild("md5");
obj.setMd5(md5.getText());
break;
}
}

return obj;
}

public synchronized void addnewObj(LocalCrl newObj) {//向XML文件添加一个LocalCrl对象
/*
*
*/
// 判断XML是否已经存在该节点

LocalCrl isexist = readinObj_ID(newObj.getDbid());
if (isexist != null) {
System.out.println("要添加的节点已经存在" + System.currentTimeMillis());
return;
}
Element root = doc.getRootElement();//获得根节点
Element crl = new Element("crl");
crl.setAttribute(new Attribute("dbid", newObj.getDbid()));
Element name=new Element("name");
name.addContent(newObj.getName());
Element version=new Element("version");
version.addContent(newObj.getVersion());
Element md5=new Element("md5");
md5.addContent(newObj.getMd5());
crl.addContent(name);//添加子元素
crl.addContent(version);
crl.addContent(md5);
root.addContent(crl);
XMLOutputter outputter = new XMLOutputter(" ", true);//定义XML格式

try {
outputter.output(doc, new FileOutputStream(Xmlfile));

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public synchronized void deleteObj_ID(String dbid) {//根据dbid删除XML中相应元素

Element root = doc.getRootElement();//获得根节点
List list = root.getChildren("crl");//获得所有crl元素
for (int i = 0; i < list.size(); i++) {
Element element = (Element) list.get(i);
if (dbid.equals(element.getAttributeValue("dbid"))) {//dbid匹配时删除相应元素
root.removeContent(element);

XMLOutputter outputter = new XMLOutputter(" ", true);//定义XML格式
try {
outputter.output(doc, new FileOutputStream(Xmlfile));

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
// obj.setName(name.getTextTrim());
}
}
}

public void deleteObj(LocalCrl old) {//根据LocalCrl删除XML中相应元素
deleteObj_ID(old.getDbid());
}

public ArrayList<LocalCrl> getAllElement() {//获得XML中所有元素
ArrayList<LocalCrl> arraylist = new ArrayList<LocalCrl>();
Element root = doc.getRootElement();
List list = root.getChildren("crl");
for (int i = 0; i < list.size(); i++) {
Element element = (Element) list.get(i);
LocalCrl obj = new LocalCrl();
obj.setDbid(element.getAttributeValue("dbid"));
obj.setName(element.getChild("name").getText());
obj.setVersion(element.getChild("version").getText());
obj.setMd5(element.getChild("md5").getText());
arraylist.add(obj);
}

return arraylist;
}



}[/code]

对应的xml文件:
[code]
<?xml version="1.0" encoding="UTF-8" standalone="no"?><local>
<crl dbid="15">
<name>kernel</name>
<version>1.0.0.0</version>
<md5>516b0591270cedacefad0d8a25a31d46</md5>
</crl>
<crl dbid="17">
<name>base</name>
<version>3.0.0.0</version>
<md5>0ba0c289664c983dde7a4fa3e907737d</md5>
</crl>
<crl dbid="22">
<name>fonts</name>
<version>1.0.0.0</version>
<md5>744ab94e13c43d1a2777a4418b690d1e</md5>
</crl>
</local>[/code]
里面LocalCrl类:[code]
public class LocalCrl {//LocalCrl类

String dbid;
String name;
String version;
String md5;
public String getDbid() {
return dbid;
}
public void setDbid(String dbid) {
this.dbid = dbid;
}
public String getMd5() {
return md5;
}
public void setMd5(String md5) {
this.md5 = md5;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}

}[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值