java处理xml

 用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值