jdom用来实现xml读写比用传统的dom方便专业多了。以下是dom实现的:
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());
}
}
JDom实现:
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;
}
}
对应的xml文件:
<?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>
里面LocalCrl类:
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;
}
}
分享到:
相关推荐
### DOM、JDOM、DOM4J解析XML实例 ...- **DOM4J**:性能介于DOM和JDOM之间,具有良好的性能和丰富的功能,是处理XML文档的优秀选择。 每种方法都有其适用场景,开发者可以根据具体需求选择合适的工具进行开发。
在Java中,有几种不同的API可以用来处理XML文档,包括DOM、SAX、JDOM和DOM4J。下面将详细介绍这四种方式。 **DOM(Document Object Model)** DOM是一种树形结构的API,它将整个XML文档加载到内存中,形成一个可...
**使用DOM4J对XML的读写** DOM4J是一个非常强大的Java库,专门用于处理XML文档。它提供了丰富的API,使得XML的读取、创建、修改和解析变得简单易行。相较于JDOM,DOM4J确实提供了更多的功能,虽然在学习曲线方面...
标题“JDom 读写XML”指的是使用JDom库进行XML文档的处理,包括读取和写入操作。JDom是一个Java API,它为XML文档提供了全面且高性能的处理能力,使得开发者能够方便地构建、修改和访问XML数据。 **JDom详解** 1. ...
【JSP实现对XML读写】是Web开发中的一项重要技能,它结合了JSP(Java Server Pages)和XML(可扩展标记语言)的优势,使开发者能更灵活地处理和存储数据。XML作为一种通用的数据交换格式,具有自描述性和结构化特点...
JDOM是一个针对Java的DOM(Document Object Model)实现,旨在为Java开发者提供一个高效且灵活的方式来处理XML文档。它提供了直接在内存中构建和操作XML文档的方法,使得XML解析和生成变得简单。 ### 2. 安装与导入...
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的...
DOM4J的API设计简洁,易于学习和使用,使得开发人员可以方便地进行XML文档的读写、遍历、修改等操作。 JDOM,另一方面,是专门为Java设计的一个XML DOM实现。JDOM 2.0.5版本是一个高性能、内存效率高的库,它提供了...
DOM4J是一个灵活且功能丰富的XML处理库,它结合了DOM、SAX和JDOM的优点,提供了方便的API来读写、操作XML。DOM4J库包括`dom4j-1.7-20060614.jar`。它支持XPath查询,可以方便地进行文档遍历和修改。DOM4J对内存的...
1. **JDOM**:JDOM是Java针对DOM规范实现的一个轻量级库,它提供了更直观、更高效的API来处理XML文档。JDOM允许开发者直接使用Java对象模型来创建、修改和读取XML。例如,使用JDOM创建XML文档的代码可能如下: ```...
8. **与DOM和SAX比较**:JDOM相比DOM更轻量级,因为它是为Java设计的,因此在性能和易用性上有所提升。相比于SAX的事件驱动解析,JDOM提供了一个完整的文档对象模型,使得操作XML更加直观,但可能在处理大型XML时...
为了处理XML文件,Java开发者经常使用库如JDOM和DOM4J,这两个都是Java XML API的实现。本文将深入探讨JDOM和DOM4J,以及它们在解析XML时的应用。 **JDOM** JDOM,全称Java Document Object Model,是一个专为Java...
DOM4J提供了一种将XML对象模型转换为字符串的方法,可以使用`DocumentWriter`或者`XMLWriter`来实现XML的输出。通过设置适当的格式化选项,可以控制生成的XML是否带缩进、换行等。 3. **XML的修改**: 修改XML...
为了处理XML文档,Java提供了多种库,其中dom4j和JDOM是两个常用的选择。这两个库都是Java API,允许开发者对XML进行读取、解析、创建和修改操作。 **dom4j-1.6.1** dom4j是一款功能强大且灵活的Java XML库,它提供...
在实际项目中,为了更方便地操作XML文件,可以使用开源库如JDOM、DOM4J或Java的StaX API。这些库提供了更高级别的API,使得XML操作更为简洁和高效。 本项目中的"ReadAndWriteXml"可能包含了以上所述的读写操作的...
使用JDOM,你可以通过XPath表达式方便地查找和操作XML元素。 3. DOM(Document Object Model) DOM是W3C推荐的标准,它将整个XML文档加载到一个树形结构中,允许开发者通过节点操作进行遍历和修改。DOM解析器提供了...
在"ParseXml"这个压缩包中,可能包含了示例代码,演示了如何使用JDOM、DOM4J和DOM解析XML文件。通过阅读和理解这些代码,你可以更好地掌握这些库的用法,提升处理XML文件的能力。记得实践是检验理论的最好方式,尝试...
使用JDOM,你可以通过DOM API或SAX API来构建XML文档,然后进行读写操作。JDOM的一个优点是它提供了直接的DOM接口,使得XML处理更加直观。 2. JAXB (Java Architecture for XML Binding) JAXB是Java标准,用于将XML...
另外,Java标准库中的javax.xml.parsers和org.w3c.dom包也提供了基本的XML读写支持。 在实际开发中,XML常用于配置文件、数据交换、SOAP(Simple Object Access Protocol)服务等场景。例如,Spring框架大量使用XML...
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的...