Dom and Sax

jaxp: java apis for xml parsing,对xml进行解析的java apis,主要有以下2中解析:
1.dom:document object model 文档对象模型 是一种idl(interface description language)语言,全是接口,没有实现
2.sax:simple apis for xml ,xml解析的简单api,民间标准。基于事件处理,主要使用观察者模式,便于读,不用加载整个文档


对dom和sax来说,处理xml过程
1.获得解析器工厂
通过解析器工厂获得解析器
3.通过解析器来对xml处理

例如:解析下面这段xml
[code]<?xml version="1.0" encoding="UTF-8"?>
<Student>
<student1>
<name>zhangsan</name>
<age>20</age>
<class>3(7)</class>
</student1>

<student2>
<name>lisi</name>
<age>24</age>
<class>3(6)</class>
</student2>

<student3>
<name>test</name>
<age>29</age>
<class>3(5)</class>
</student3>
</Student>[/code]

Document对象代表文档的[color=red]根节点[/color],它是解析xml文档的入口,上面的xml里<Student>是[color=red]根元素节点[/color]


[code]


package test;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

public class DomTest {
public static void main(String[] args) {
try{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder buider = factory.newDocumentBuilder();

//获得根节点
Document document = buider.parse(new File("test.xml")) ;
//输出结果为:com.sun.org.apache.xerces.internal.dom.DOMImplementationImpl@124bbbf可以看到具体实现是apache的一个实现,因为dom是一种idl语言,全是接口,没有实现
System.out.println(document.getImplementation());

//获得元素节点的一个集合
NodeList nodeList = document.getElementsByTagName("student");
System.out.println(nodeList.getLength());

for(int i=0;i<nodeList.getLength();i++){
//Node是顶级父接口。Element和Text都是其子类
Element element = (Element)nodeList.item(i);
Text textName = (Text)(element.getElementsByTagName("name").item(0).getFirstChild());
System.out.println("name: " + textName.getNodeValue());

Text textAge = (Text)(element.getElementsByTagName("age").item(0).getLastChild());
System.out.println(textAge);//打印出来的为[#text: 20]
System.out.println("age: " + textAge.getNodeValue());

//是不是非Text的Node元素不能使用getFirstChild()和getLastChild();
System.out.println(element.getFirstChild());//打印出来的为[#text: ]
System.out.println(element.getLastChild());//打印出来的为[#text: ]

//下面这2行注释的不正确
// Text textId = (Text)(element.getLastChild().getFirstChild());
// System.out.println("id: " + textId.getNodeValue());
}

}catch(Exception e){
e.printStackTrace();
}

}

}


[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值