2019独角兽企业重金招聘Python工程师标准>>>

1.DOM解析XML

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

Document document = documentBuilder.parse(new FileInputStream(file));

得到的Document对象就是XML文档对象的实体

NodeList nodeList = document.getElementsByTagName("book");

得到标签名称是book的节点集合

Node和Element的区别:

node和Element是两个领域的概念。

NODE是相对TREE这种数据结构而言的。TREE就是由NODE组成。这个部分你可以参考离散数学的树图。

ELEMENT则是XML里的概念,<xxx>就是元素,是XML中的数据的组成部分之一。

元素(Element)和结点(Node)的区别,元素是一个小范围的定义,必须是含有完整信息的结点才是一个元素,

例如<div>...</div>。但是一个结点不一定是一个元素,而一个元素一定是一个结点。

举例来说:

<book class="Hello World 2">

<name scope="test">Spring in Action</name>

<price scope="dev">39.0</price>

</book>

这整个可以理解为一个Element ,但是如果使用geiChildNode 发现有5个Node,分别是<name></name> , <price></price>,Spring in Action ,39.0 </book>

代码实例如下:

NodeList nodeList = document.getElementsByTagName("book");

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

Node node = nodeList.item(i);

Element element = (Element) node;

System.err.println(element.getAttribute("class"));

NodeList nodeList2 = element.getElementsByTagName("price");

System.err.println(((Element) (nodeList2.item(0))).getAttribute("scope"));

}

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

Node node = nodeList.item(i);

System.err.println(node.getChildNodes().getLength());

}

打印的结果是5

NodeList child = node.getChildNodes();

for (int j = 0; j < child.getLength(); j++) {

System.err.println(child.item(j).getNodeType() + "node Type");

}

打印结果依次为:

3node Type

1node Type

3node Type

1node Type

3node Type

可以验证我们想要表达的

2.SAX解析XML文件

重要的一点:EntityResolver 这个究竟是为了干什么 : http://www.cnblogs.com/mjorcen/p/3642855.html 这个文章有详细的解释

继承DefaultHandler 这个类 主要重载以下方法就可以实现一些类似的操作:

startDocument :XML解析开始

endDocument:XML解析结束

startElement:解析元素开始

endElement:解析元素结束

characters:获取节点中间文字内容

转载于:https://my.oschina.net/payzheng/blog/510937

框架源码深入需要准备的知识之解析XML相关推荐

  1. Android开发神器:OkHttp框架源码解析

    前言 HTTP是我们交换数据和媒体流的现代应用网络,有效利用HTTP可以使我们节省带宽和更快地加载数据,Square公司开源的OkHttp网络请求是有效率的HTTP客户端.之前的知识面仅限于框架API ...

  2. 深入理解Tomcat和Jetty源码之第一篇前奏知识

    深入理解Tomcat和Jetty源码之第一篇前奏知识 这周开始对Tomcat和Jetty的源码和框架产生了浓厚的兴趣,接下来想记录一下学习Tomcat和Jetty源码的心得和体会,有兴趣的朋友可以关注 ...

  3. java 并发框架源码_某网Java并发编程高阶技术-高性能并发框架源码解析与实战(云盘下载)...

    第1章 课程介绍(Java并发编程进阶课程) 什么是Disruptor?它一个高性能的异步处理框架,号称"单线程每秒可处理600W个订单"的神器,本课程目标:彻底精通一个如此优秀的 ...

  4. 【java集合框架源码剖析系列】java源码剖析之ArrayList

    注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本. 本博客将从源码角度带领大家学习关于ArrayList的知识. 一ArrayList类的定义: public class Arr ...

  5. 华为方舟编译器开源官网正式上线,并首次开放了框架源码!

    2019 年 8 月 31 日,华为方舟编译器开源官网正式上线,并首次开放了框架源码.方舟编译器对终端软件编译机制进行了架构级优化,将显著地提升用户体验. 官方网站: https://www.open ...

  6. Android八门神器(一):OkHttp框架源码解析

    HTTP是我们交换数据和媒体流的现代应用网络,有效利用HTTP可以使我们节省带宽和更快地加载数据,Square公司开源的OkHttp网络请求是有效率的HTTP客户端.之前的知识面仅限于框架API的调用 ...

  7. Android八门神器(一): OkHttp框架源码解析

    HTTP是我们交换数据和媒体流的现代应用网络,有效利用HTTP可以使我们节省带宽和更快地加载数据,Square公司开源的OkHttp网络请求是有效率的HTTP客户端.之前的知识面仅限于框架API的调用 ...

  8. Android八门神器(一):OkHttp框架源码解析 1

    HTTP是我们交换数据和媒体流的现代应用网络,有效利用HTTP可以使我们节省带宽和更快地加载数据,Square公司开源的OkHttp网络请求是有效率的HTTP客户端.之前的知识面仅限于框架API的调用 ...

  9. BAT高级架构师合力熬夜15天,肝出了这份PDF版《Android百大框架源码解析》,还不快快码住。。。

    前言 为什么要阅读源码? 现在中高级Android岗位面试中,对于各种框架的源码都会刨根问底,从而来判断应试者的业务能力边际所在.但是很多开发者习惯直接搬运,对各种框架的源码都没有过深入研究,在面试时 ...

最新文章

  1. 10个比较艰难的Java面试题与答案!
  2. Java抽象类与接口的区别
  3. MySQL分布式集群
  4. java 文件流读取文本_如何在Java 8中处理流和读取文本文件
  5. RecyclerView滑动到底部自动加载
  6. 我和学姐聊了下他在阿里这9年的成长,受益颇多!
  7. 漫步数理统计四——概率集合函数(下)
  8. Treap树堆(bzoj 3224: Tyvj 1728 普通平衡树)
  9. 价值5000元的报表分享
  10. jenkins中配置git下载代码
  11. 使用<details>标签在网页里面添加脚注
  12. 92.91p31.space\/index.php 92.91p31.space,93.91p31.space
  13. 每天脑子里莫名其妙冒出来的话(常见于早上起床之后)持续记录,这也是日记的一种
  14. 思科二层冗余技术对比---PortChannel/StackWise/VSS/vPC
  15. linux下安装飞信机器人教程
  16. Fragment already added 问题
  17. 计算机网络ip进制转换方法,IP地址与二进制之间的转换
  18. 从侵权看“人肉搜索”
  19. java短信模板变量参数赋值_JIEQI CMS模板制作必读(JIEQI CMS模板 - 2.赋值变量形式)...
  20. 混合颜色带的应用(一)

热门文章

  1. Java基础笔记(一)
  2. HDU - 2196(树形DP)
  3. Intel发6款全新9代i9/i7/i5 CPU:巅峰8核
  4. Docker的安装与启动教程
  5. WebSocket请求过程分析及实现Web聊天室
  6. web网页 页面布局的几种方式(转)
  7. spring 配置版本问题
  8. Oracle 向上递归、向下递归
  9. npm配置镜像、设置代理
  10. 动态修改tabs选项卡和datagrid的某些属性值