XML文件的解析—DOM、SAX
一、DOM 解析
思路:获得Document对象,遍历其中节点获得需要的内容
要点:
Document : DocuemntBuilderFactory --newDocumentBuilder --parse(xml文件输入流)
根节点: getDocumentElement()
子节点 :NodeLIst list=root.getChildNodes(); Node n=list.item(index);
属性: element.getAttribute("id") 或者 node.getAttributes().getNamedItem("XXX").getNodeValue();
文本:node.getTextContent(); 或者 node.getNodeValue();
部分代码:
//1. 建立一个解析器工厂:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//2. 获得一个DocumentBuilder对象,这个对象代表了具体的DOM解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//3. 将xml文件加载到内存中,得到表示整个文档的Document对象
InputStream inStream=DomParser.class.getClassLoader().getResourceAsStream("book.xml");
Document doc=db.parse(inStream);
//4. 根据标签名获得对应的Node集合
NodeList bookList=doc.getElementsByTagName("book");
//5. 对集合进行遍历
for(int i=0;i<bookList.getLength();i++){
Book book=new Book();
Element ele=(Element)bookList.item(i);//取出当前节点
String id=ele.getAttribute("id");//根据属性名获得属性值
book.setId(id);
Node nameNode=ele.getElementsByTagName("name").item(0);//获取唯一的name节点
String name=nameNode.getFirstChild().getNodeValue();//获得文本值
book.setName(name);
Node authorNode=ele.getElementsByTagName("author").item(0);//获取唯一的author节点
String author=authorNode.getFirstChild().getNodeValue();//获得文本值
book.setAuthor(author);
resultMap.put(book.getId(), book);
二、SAX解析
思路:获得SAXParser,调用parser 方法
要点:
工厂获得实例:SAXParserFactory — newSAXParser
parser.parse(input, handler); 该方法有两个参数,前一个是文件或者输入流,后一个是事件监听器(助手类)
新建助手类 继承 DefaultHandler ,重写需要的方法
部分代码:
SaxParser:
//1. 将xml文件加载到内存中,得到表示整个文档的Document对象
InputStream inStream=DomParser.class.getClassLoader().getResourceAsStream("book.xml");
//2. 创建Sax解析工厂类
SAXParserFactory factory=SAXParserFactory.newInstance();
//3. 得的Sax解析器
SAXParser parser=factory.newSAXParser();
//4. 创建助手类的实例
SaxHandler handler=new SaxHandler();
//5. 解析文件
parser.parse(inStream, handler);
//6. 获得解析结果
List<Book> result=handler.getResultList();
for(Book b:result){
System.out.println(b);
}
事件监听器类(助手类):
在控制台打印信息,同时将信息封装入LIst
public class MyDefaultHandler extends DefaultHandler{
List<Student> list=new ArrayList();
Student s=null; private String value;
@Override
public void startDocument() throws SAXException {
super.startDocument();
System.out.print("文档解析开始"); } @Override
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("\n文档解析结束");
System.out.println(list.toString());
} @Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException { if("student".equals(qName)){
System.out.println("\n学生信息:");
s=new Student();
s.setId(Integer.parseInt(attributes.getValue(0)));
}
if("name".equals(qName)){
System.out.print("姓名:"); }
if("telephone".equals(qName)){
System.out.print("电话:"); }
if("addrs".equals(qName)){
System.out.print("地址:"); }
} @Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.print(" ");
if("student".equals(qName)){
list.add(s);
} if("name".equals(qName)){
s.setName(value);
}
if("telephone".equals(qName)){
s.setTelephone(value);
}
if("addrs".equals(qName)){
s.setAddr(value);
} } @Override
public void characters(char[] ch, int start, int length)
throws SAXException {
value=new String(ch, start,length).trim();
System.out.print(value); }
XML文件的解析—DOM、SAX的更多相关文章
- 解析XML文件之使用DOM解析器
在前面的文章中.介绍了使用SAX解析器对XML文件进行解析.SAX解析器的长处就是占用内存小.这篇文章主要介绍使用DOM解析器对XML文件进行解析. DOM解析器的长处可能是理解起来比較的直观,当然, ...
- Java是如何解析xml文件的(DOM)
Java解析xml文件 在Java程序中读取xml文件的过程也称为"解析xml文件": 解析的目的: 获取 节点名和节点值 获取 属性名.属性值. 四中解析方式: DOM SAX ...
- 用SAX和PULL进行XML文件的解析与生成
XML解析有传统的dom方法还有Jsoup,SAX,PULL等,这里讲的是比较省内存的SAX和PULL方法.Android中极力推荐用PULL的方式来解析,我个人觉得pull确实比较简单,但其内部的逻 ...
- Android XML文档解析(一)——SAX解析
---------------------------------------------------------------------------------------------------- ...
- [置顶] Android开发之XML文件的解析
Android系统开发之XML文件的解析 我们知道Http在网络传输中的数据组织方式有三种分别为:XML方式.HTML方式.JSON方式.其中XML为可扩展标记语言,如下: <?xml vers ...
- JAVA读取XML文件并解析获取元素、属性值、子元素信息
JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取 InputStream DocumentBuilderFactory Element Node 前言 最 ...
- JDOM方法实现对XML文件的解析
首先要下载JDOM.jar包,下载地址:http://download.csdn.net/detail/ww6055/8880371 下载到JDOM.jar包之后导入到工程中去. 实例程序: book ...
- xml文件的解析
1. xml文件的解析 void CDataMgr::readStringData() { std::string xml_name = "config/string.xml"; ...
- 类的反射及xml文件的解析
类的反射 xml文件的解析 .properties||.xml配置文件的创建及读取内容 //创建对象 Properties properties = new Properties(); //存储 pr ...
随机推荐
- spark2.4.0+hadoop2.8.3全分布式集群搭建
集群环境 hadoop-2.8.3搭建详细请查看hadoop系列文章 scala-2.11.12环境请查看scala系列文章 jdk1.8.0_161 spark-2.4.0-bin-hadoop2. ...
- 超详细的遗传算法(Genetic Algorithm)解析
https://blog.csdn.net/u010451580/article/details/51178225 https://www.jianshu.com/p/c82f09adee8f 00 ...
- my题库
数论: 51nod 1240 莫比乌斯函数 51nod 1135 原根 图论: 51nod 1264 线段相交 51nod 1298 圆与三角形 dp: 数位dp: hdu 4734 51nod 10 ...
- Homework:奇偶性
// 程序功能: // 要求用户从键盘输入一个整数,判断其是奇数还是偶数 #include <stdio.h> int main() { int x; printf("输入一个整 ...
- 循环输入到列表的基础方法 -----python-----
print('向列表中添加元素(输入“#”结束)\n并查看添加完的列表') list1=[] while 1: username=input('>>>') if (username. ...
- 项目(十)openvpn架构实施方案(一)跨机房异地灾备
第一章VPN介绍 1.1 VPN概述 VPN(全称Virtual Private Network)虚拟专用网络,是依靠ISP和其他的NSP,在公共网络中建立专用的数据通信网络的技术,可以为企业之间 ...
- linux 安装java环境
1.检查是否安装或者linux系统自带jdK 命令:java -version 查找JDK相关包是否被安装: rpm -qa |grep jdk rpm -qa |grep gcj 删除JDK相关包: ...
- checkbox、radio控件和文字不对齐
一般使用html控件的时候 单选按钮和复选框的控件和文字不对齐 给input控件加上 style="vertical-align: middle; margin-top: -2px; ...
- 使用css3实现动画来开启GPU加速
参考文章: https://www.w3cplus.com/css3/introduction-to-hardware-acceleration-css-animations.html http:// ...
- VS下.net开发常用扩展、配置
Vue.js Pack Copy As Html HTML Tools Word Highlight With Margin 绿豆沙颜色:R:199 G:237 U:204