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 ...
随机推荐
- Nginx之 try_files 指令
location / { try_files $uri $uri/ /index.php; } 当用户请求 http://localhost/example 时,这里的 $uri 就是 /exampl ...
- ActiveMq Windows 配置优化
最近ActiveMQ 5.15.3 会报 OutofMemory的错误 在 wrapper.conf中 #wrapper.java.additional.8=-Dorg.apache.activemq ...
- paramiko
http://www.cnblogs.com/wupeiqi/articles/5095821.html
- UI测试和GUI测试的区别
UI 测试 包含GUI测试和command line 测试 分享连接 https://www.ranorex.com/resources/testing-wiki/gui-testing/
- xshell下mysql数据库只导出表结构不导出数据
操作系统:linux: 使用软件:xshell.winscp 进入系统之后输入命令: mysqldump -u 用户名 - p 密码 -d 数据库名 > aaa.sql 注意字符间的空格. 之后 ...
- [原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(三) -- 安装confluence 6.6.1
[原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(三) -- 安装confluence 6.6.1 有了安装Jira的经验, 这次再安装conflue ...
- python入门(十七)python连接mysql数据库
mysql 数据库:关系型数据库mysql:互联网公司 sqllite:小型数据库,占用资源少,手机里面使用oracle:银行.保险.以前外企.sybase:银行+通信 互联网公司key:valuem ...
- python 练习题(1-15)
1.给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 2.生成双色球 3.逻辑运算(运算符优先级) 4.输入一个整数,判断这个数是几位数 5.用while循环计算 1-2+3-4...-9 ...
- IIS启动应用程序池报错"服务无法在此时接受控制信息"
用管理员方式打开命令行 输入命令netsh winsock reset 这个命令在百科上的解释是 netsh winsock reset命令,作用是重置 Winsock 目录.如果一台机器上的Wins ...
- 【题解二连发】Construct Binary Tree from Inorder and Postorder Traversal & Construct Binary Tree from Preorder and Inorder Traversal
LeetCode 原题链接 Construct Binary Tree from Inorder and Postorder Traversal - LeetCode Construct Binary ...