XML——解析XML文档
【0】README
0.1)本文描述 转自 core java volume 2, 旨在理解 XML——解析XML文档 的基础知识;
0.2) for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter2/ParseXMLTest.java
【1】解析XML文档相关
0)解析器
- 0.1)树型解析器:(树结构)
- 0.2)流机制解析器:读入XML文档时生成相应的事件;
1)解析器定义: 解析器是这样一个程序, 它读入一个文件,确认这个文件具有正确的格式,然后将其分解成各种元素,使得程序员能够访问这些元素; (干货——解析器定义)
2)java 库提供了两种XML解析器: (干货——两种XML解析器定义)
- 2.1)树型解析器:像文档对象模型(Document Object Model, DOM)解析器这样的树型解析器,它们将读入的XML文档转换为 树结构;
- 2.2)流机制解析器:像XML简单API(Simple API for XML, SAX)解析器这样的流机制解析器, 它们在读入XML文档时生成相应的事件;
3)java XML 处理API(java API for XML Processing, JAXP)库:使得实际上可以以插件形式使用这些解析器中的任意一个, 但JDK 包含了自己的DOM解析器;
- 3.1)解析步骤(steps):
- s1)创建一个 DocumentBuilder 对象,可以从DocumentBuilderFactory中得到这个对象,如:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
- s2)可以从文件中读入某个文档:
File f = ...;
Document doc = builder.parse(f);
- s2.1)或者用一个URL:
URL u = ...;
Document doc = builder.parse(u);
- s2.2)甚至可以指定一个任意输入 流:
InputStream is = ...;
Document doc = builder.parse(is);
- Attention) 如果使用输入流作为输入源,那么对于那些以该文档的位置为相对路径而被引用的文档,解析器将无法定位;但是可以安装一个“实体解析器”来解决这个问题;
3.2)Document对象: 是XML 文档的树型结构在内存中的表现,它由实现了Node 接口及其各种子接口的类的对象构成;Node 接口及其子接口的层次结构如下: (干货——Document对象)
3.2.1)可以通过调用 getDocumentElement 方法来启动对文档内容的分析,它将返回根元素:
Element root = doc.getDocumentElement();
- 3.2.2)如果要得到该元素的子元素,使用 getChildNodes 方法,这个方法返回一个类型为 NodeList 的 集合;
- 3.2.3)item 方法:将得到指定索引值的项;
- 3.2.4)getLength方法: 则提供了项的总数;
- 3.2.5) 看个荔枝:像这样枚举所有子元素:
NodeList children = root.getChildNodes();
for (i < children.getLength())Node child = children.item(i);
- 3.2.6)如果只希望获得子元素,可以忽略空白字符:
for (i < children.getLength())
{Node child = children.item(i);if(child instanceof Element)
}
现在,只会看到两个元素: 标签名是 name 和 size;
3.3) 方法集合:
- 3.3.1) getLashChild, getNextSibling 方法;
- 3.3.2)枚举节点属性, getAtributes;
- 3.3.3)调用getNodeName 和getNodeValue 方法可以得到 属性名和属性值(getAttribute 方法);
- 3.3.4)知道属性名, 可以直接获取属性值:
String unit = element.getAttribtte("unit");
4)解析来自给定文件, URL 或输入流的 XML 文档,返回解析后的文档的三种方法(Methods); (干货——三种解析来自给定文件的方法,分别是文件对象,String对象 和 输入流对象)
- M1) Document parse(File f) ;
- M2) Document parse(String url) ;
- M3) Document parse(InputStrema in) ;
XML——解析XML文档相关推荐
- 火狐浏览器 xml 解析错误:文档元素后存有无效内容_五分钟了解浏览器工作原理...
作者简介: 李中凯 八年多工作经验 前端负责人, 擅长JavaScript/Vue. 掘金文章专栏:KaysonLi 的个人主页 - 专栏 - 掘金 Web 浏览器无疑是用户访问互联网最常见的入口.浏 ...
- [Swift通天遁地]七、数据与安全-(2)对XML和HTML文档的快速解析
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- 使用XML创建Excel文档
使用XML创建Excel文档 原例子使用VB.Net写的,以下的用C#改写的代码 原文代码: http://www.gotdotnet.com/Community/UserSam ...
- Java 中的 XML:Java 文档模型的用法
Java 中的 XML:Java 文档模型的用法 英文原文 内容: 代码对比 DOM JDOM dom4j Electric XML XPP 结束语 下一次... 参考资料 关于作者 对本文的评价 相 ...
- Caused by: org.xml.sax.SAXParseException: 文档根元素 “component“ 必须匹配 DOCTYPE 根 “null“
切换了dev分支启动时报错:Caused by: org.xml.sax.SAXParseException: 文档根元素 "component" 必须匹配 DOCTYPE 根 & ...
- .Net解析html文档类库HtmlAgilityPack完整使用说明
在前几篇文章中([搜房网房产数据采集程序demo--GeckoWebBrowser实例] )都有提到一个解析html的C#类库HtmlAgilityPack, 今天终于有时间整理一下,并把Demo分享 ...
- python读取docx中表格 图片_python 解析docx文档的方法,以及提取插入的文本对象和图片...
首先安装docx模块,通过pip install docx或者在docx官方链接上下载安装都可以 下面来看下如何解析docx文档:文档格式如下 有3个部分组成 1 正文:text文档 2 一个表格. ...
- java word库_几种解析Word文档的Java类库比较
推荐指数:⭐ 因为之前做过EXCEL的解析,所以我首选就是POI,然而经过调查之后发现POI解析Word文档就是个坑,非常难用不说,有些功能还不支持.试验一番之后不得不放弃了. 推荐指数:⭐⭐⭐ 发现 ...
- poi解析word文档(解析表格,emf,wmf,svg转jpg图片)
POI解析word文档 poi解析word的表格: 提前先准备需要的jar包: <!-- poi --><dependency><groupId>org.a ...
最新文章
- 【DIY】送给儿子的感应小夜灯,DIY小夜灯
- adobe flash player plugin_Adobe的LOGO升级了! ps图标没有描边了
- android146 360 病毒查杀
- 如何把Access转成SQL Server的方法介绍
- Pell数列(信息学奥赛一本通-T1202)
- 支付宝上线“老年版相互宝”:爸妈终于可以加入了
- android恢复联系人,如何从Android手机恢复联系人[最佳方式]
- S11 day 94 RestFramework 之 APIView视图
- 2012.5.4号--关于125k(简易读卡和低频唤醒)
- 2021-08-20JSP内置对象及作用域
- 火影忍者ol服务器维护中,火影忍者ol3月31日更新了什么?维护到几点?新增神无毗桥模拟战...
- 美萍系统怎么修改服务器时间,局域网中如何架设美萍VOD视频点播系统服务器
- truncate table(截断表)
- 什么是 VXLAN 技术?
- 洛谷 P5713	【深基3.例5】洛谷团队系统 C语言
- 利用easyX图形库画迷宫问题的路径
- Hdu 4503 湫湫系列故事——植树节
- 如何判断两个随机变量是否独立,同分布
- 怎样识别三洋18650锂电池电芯
- 专升本英语——英语的九种时态总结
热门文章
- 【NOI2019】 机器人 【区间dp】【插值】【下降幂多项式】【分段函数】
- 2018 ACM-ICPC World Finals Problem D.Gem Island
- D - ABC Conjecture Gym - 102798D
- 盲盒(随机概率 + 最大公约数)
- CF1408D:Searchlights
- P3170-[CQOI2015]标识设计【插头dp】
- 【模板】最大密度子图
- 【期望DP】概率充电器(luogu 4284)
- 【单调队列】【DP】城市交通(jzoj 1749)
- 【DP】【记忆化搜索】NIKOLA(jzoj 1150)