XML文件的解析

XML文件的解析主要有两种解析方式 DOM 和 SAX,两者的区别在于:
1.DOM是W3C指定的一套规范标准,核心是按树形结构处理数据,DOM解析器读入XML文件并在内存中建立一个结构一模一样的“树”,这树各节点和XML各标记对应,通过操纵此“树”来处理XML中的文件。XML文件很大时,建立的“树”也会大,所以会大量占用内存。
2.SAX解析器占内存少,效率高。SAX解析器核心是事件处理机制。例如解析器发现一个标记的开始标记时,将所发现的数据会封装为一个标记开始事件,并把这个报告给事件处理器,事件处理器再调用方法(startElement)处理发现的数据。事件处理器可以自己编写也可以从父类继承。

下面是两中方式实现的简单说明

1.DOM解析 // org.jdom
try {
// 获取对应文件
File f = new File(path);
// 注册解析器
SAXBuilder builder = new SAXBuilder(false);
// 创建文档,读入XML文件
Document doc = builder.build(f);
// 根节点
Element rootElement = doc.getRootElement();
// 二级节点集合
List childlist = rootElement.getChildren();
for (int i = 0; i < childlist.size(); i++) {
Element temp = (Element) (childlist.get(i));
// todo
}
} catch (Exception e) {
e.printStackTrace();
return "";
}




2.SAX 解析方法 // org.xml.sax
(1)创建侦听器类,继承父类DefaultHandler并实现抽象方法startElement(), endElement()
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
public class **Listener extends DefaultHandler {
// 当解析到元素的开始标签时触发
/**
* 参数:
uri - 名称空间 URI,如果元素没有任何名称空间 URI,或者没有正在执行名称空间处理,则为空字符串。
localName - 本地名称(不带前缀),如果没有正在执行名称空间处理,则为空字符串。
qName - 限定的名称(带有前缀),如果限定的名称不可用,则为空字符串。
attributes - 附加到元素的属性。如果没有属性,则它将是空的 Attributes 对象。
* 抛出:
SAXException - 任何 SAX 异常,可能包装另外的异常。
*/
public void startElement(String uri, String localName, String qName, Attributes attributes) {
// qName 当前解析到的xml元素名
// 属性值通过 attributes.getValue() 获取
String propertyValue = attributes.getValue("propertyName");
// todo
}
// 当解析到元素的结束标签时触发
public void endElement(String uri, String localName, String qName) throws SAXException {
// todo
}
}

(2)创建侦听器对象,并调用 parse() 解析
**Listener msl = new **Listener();
SAXParser parser = factory.newSAXParser();
File xmlFile = new File("E:\\file.xml");
// 此方法会自动解析xml文件
parser.parse(xmlFile, msl);



以上是笔者的个人知识总结,有不对之处,欢迎指正。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值