Java DOM读写XML

2010-02-01 16:38

DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准。DOM 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而 DOM 被认为是基于树或基于对象的。DOM 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像 SAX 那样是一次性的处理。DOM 使用起来也要简单得多。

 

先看看怎样来读取XML

创建DOM解析首先我们用创建一个定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器-DocumentBuilderFactory

方法: DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance ();

然后运用工厂dbf来定义DocumentBuilder

方法:DocumentBuilder db = dbf.newDocumentBuilder();

最后DocumentBuilder的parse(String path)来得到Document对象

方法:Document doc = db.parse(“in.xml”);

好了Document对象我们获得了,下面让我们看看怎么处理这个对象

假设in.xml文件内容为:

<?xml version="1.0" encoding="utf-8"?>

<学生花名册>

    <学生>

       <姓名>李丽</姓名>

       <性别>女</性别>

    </学生>

    <学生>

        <姓名>刘畅</姓名>

       <性别>男</性别>

    </学生>

</学生花名册>

 

首先让我们来获取作为xml引用声明指定此文档版本号的属性

方法:doc.getXmlVersion();结果:1.0

然后获取次文档的编码模式

方法:doc.getXmlEncoding();结果:utf-8

获取文档的子节点

方法:Element root = doc.getDocumentElement();结果:返回Element对象-à[<学生花名册>]

[<学生花名册>]这个节点中包含了若干个学生对象,怎么来获得他们呢

方法:NodeList students = root.getElememtsByTagName(“学生”);通过这个方法我们可以获取这些节点的有序集合

呵呵!已经到这一步了,下面该怎么办了呢我们需要处理这些学生

下面我们来遍历这个集合吧

for (int i = 0; i < students.getLength(); i++) {

Element student = (Element) students.item(i);//遍历集合获取每个学生元素

System.out.println(student.getAttribute("id"));//获取学生的Id

System.out.println(student.getElementsByTagName("姓名").item(0).getTextContent());//获取姓名

System.out.println(student.getElementsByTagName("性别").item(0).getTextContent());//获取性别

 

}

 

我们再看看怎样来写XML

首先和前面差不多

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();

下面有点小区别因为我们要写一个xml所以我们不能像读取那些用parse(String path);获取Document对象了

Document doc = db.newDocument();//我们要用DocumentBuilder 获取 DOM Document 对象的一个新实例来生成一个 DOM 树。

现在开始创建节点

Element root = document.createElement(“学生花名册”);

doc.appendChild(root);//把这个节点追加到doc文档中

Element student = doc.createElement(“学生”);//创建学生元素节点

Attr id = doc.createAttribute(“id”);//创建Id属性节点

Id.setValue(“1”);//给属性赋值

student.setAttributeNode(id);//把id属性节点追加到student

root.appendChild(student);//追加到root节点

Element name = doc.createElement(“姓名”);//创建姓名元素节点

Text nameValue = doc.createTextNode(“李丽”);//创建文本节点

name.appendChild(nameValue);

student.appendChild(name);

Element sex = doc.createElement(“性别”);//创建姓名元素节点

Text sexValue = doc.createTextNode(“女”);//创建文本节点

name.appendChild(sexValue);

student.appendChild(sex);

 

文档已经准备完毕了,下面我们把它输出

FileOutputStream out = new FileOutputStream(“out.xml”);//声明一个输出流备用

OutputFormat format = new OutputFormat(doc);//格式化doc

XMLSerializer xmlSerilizer = new XMLSerializer(out, format);

xmlSerilizer.serialize(doc); //序列化文档

好了我们已经得到了out.xml文档了如下:

<?xml version="1.0" encoding="UTF-8"?>

<学生花名册><学生 id="1"><姓名>李丽</姓名><性别>女</性别></学生></学生花名册>

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值