用java处理xml文件可选的API有多种,w3c官方的有SAX(simple api for xml)和DOM(document object model),sun有JAXP(java api for xml processing),第三方的有jdom和dom4j。
其中dom和sax的区别如下:
(1)DOM以一个分层的对象模型来映射xml文档;而SAX将文档中的元素转化为对象来处理。
(2)DOM将文档载入到内存中处理;而SAX则相反,它可以检测一个即将到来的XML流,由此并不需要所有的XML代码同时载入到内存中。
(3)比较:使用DOM时,数据以树状结构的形式被加载到内存中,因此可以修改它以便应用程序能对数据和结构作出更改,所以如果打算对数据作出更改并将它输出为XML,那就用DOM;对于大型文件,SAX 是更好的选择,因为SAX 实现通常要比DOM实现更快。
至于JAXP,我没用过。
JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念以及映射),把SAX和DOM的功能有效地结合起来。如果只是做一些简单的应用,可以用JDOM,比较容易上手。
dom4j似乎在综合性能上是最好的,口碑不错。
下面是使用jdom读写xml文件的一个简单例子。
import
java.io.FileNotFoundException;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
org.jdom.Document;
import
org.jdom.Element;
import
org.jdom.JDOMException;
import
org.jdom.input.SAXBuilder;
import
org.jdom.output.Format;
import
org.jdom.output.XMLOutputter;

public
class
JdomDemo

...
{

//写XML文件
public static void writeXml() throws FileNotFoundException, IOException

...{
//先定义根元素
Element root = new Element("aboutme");
//设置根元素的属性
root.setAttribute("update","2007-8-20");
//以根元素为参数定义文档对象
Document doc = new Document(root);
//在根元素中添加元素name
Element name=new Element("name").addContent("ych");
root.addContent(name);
//在根元素中添加元素contact及其子元素
Element contact=new Element("contact");
contact.addContent(new Element("phone").addContent("139519*****"));
contact.addContent(new Element("email").addContent("ych2054@163.com"));
root.addContent(contact);
//输出内容到外部XML文件(这里用XMLOutputter,也可以用SAXOutputter,DomOutputter和JTreeOutputter)
XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());
FileOutputStream fOut=new FileOutputStream("demo.xml");
xmlOut.output(doc,fOut);
fOut.close();
}
//读XML文件
public static void readXml() throws JDOMException, IOException

...{
//实例化一个合适的解析器对象(这里使用SAXBuilder,也可以用DOMBuilder和ResultSetBuilder)
SAXBuilder sb = new SAXBuilder();
//以xml文件为参数定义文档对象
Document doc = sb.build("demo.xml");
//获取根元素
Element root = doc.getRootElement();
System.out.println("the update time is "+root.getAttributeValue("update"));
//获取子元素name
Element name=root.getChild("name");
System.out.println("the name is "+name.getText());//获取元素自身的内容
//获取子元素contact
Element contact=root.getChild("contact");
System.out.println("the phone is "+contact.getChildText("phone"));//直接获取子元素的内容
System.out.println("the email is "+contact.getChildText("email"));//直接获取子元素的内容
}
//修改XML文件
public static void editXml() throws JDOMException, IOException

...{
//实例化一个合适的解析器对象(这里使用SAXBuilder,也可以用和ResultSetBuilder)
SAXBuilder sb = new SAXBuilder();
//以xml文件为参数定义文档对象
Document doc = sb.build("demo.xml");
//修改根元素属性
Element root = doc.getRootElement();
root.setAttribute("update","2007-8-21");
//获取子元素contact
Element contact=root.getChild("contact");
contact.removeChild("phone");
contact.getChild("email").setText("ych2054@126.com");
//将修改后的内容输出到xml文件中
XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());
FileOutputStream fOut=new FileOutputStream("demo.xml");
xmlOut.output(doc,fOut);
fOut.close();
}
public static void main(String[] args) throws JDOMException, IOException

...{
JdomDemo.writeXml();
JdomDemo.readXml();
JdomDemo.editXml();
JdomDemo.readXml();
}
}
附:JDOM在线文档 http://www.jdom.org/docs/apidocs/index.html