【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文档相关推荐

  1. 火狐浏览器 xml 解析错误:文档元素后存有无效内容_五分钟了解浏览器工作原理...

    作者简介: 李中凯 八年多工作经验 前端负责人, 擅长JavaScript/Vue. 掘金文章专栏:KaysonLi 的个人主页 - 专栏 - 掘金 Web 浏览器无疑是用户访问互联网最常见的入口.浏 ...

  2. [Swift通天遁地]七、数据与安全-(2)对XML和HTML文档的快速解析

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  3. 使用XML创建Excel文档

    使用XML创建Excel文档            原例子使用VB.Net写的,以下的用C#改写的代码 原文代码: http://www.gotdotnet.com/Community/UserSam ...

  4. Java 中的 XML:Java 文档模型的用法

    Java 中的 XML:Java 文档模型的用法 英文原文 内容: 代码对比 DOM JDOM dom4j Electric XML XPP 结束语 下一次... 参考资料 关于作者 对本文的评价 相 ...

  5. Caused by: org.xml.sax.SAXParseException: 文档根元素 “component“ 必须匹配 DOCTYPE 根 “null“

    切换了dev分支启动时报错:Caused by: org.xml.sax.SAXParseException: 文档根元素 "component" 必须匹配 DOCTYPE 根 & ...

  6. .Net解析html文档类库HtmlAgilityPack完整使用说明

    在前几篇文章中([搜房网房产数据采集程序demo--GeckoWebBrowser实例] )都有提到一个解析html的C#类库HtmlAgilityPack, 今天终于有时间整理一下,并把Demo分享 ...

  7. python读取docx中表格 图片_python 解析docx文档的方法,以及提取插入的文本对象和图片...

    首先安装docx模块,通过pip install docx或者在docx官方链接上下载安装都可以 下面来看下如何解析docx文档:文档格式如下 有3个部分组成 1 正文:text文档 2 一个表格. ...

  8. java word库_几种解析Word文档的Java类库比较

    推荐指数:⭐ 因为之前做过EXCEL的解析,所以我首选就是POI,然而经过调查之后发现POI解析Word文档就是个坑,非常难用不说,有些功能还不支持.试验一番之后不得不放弃了. 推荐指数:⭐⭐⭐ 发现 ...

  9. poi解析word文档(解析表格,emf,wmf,svg转jpg图片)

    POI解析word文档 poi解析word的表格:   提前先准备需要的jar包:   <!-- poi --><dependency><groupId>org.a ...

最新文章

  1. 【DIY】送给儿子的感应小夜灯,DIY小夜灯
  2. adobe flash player plugin_Adobe的LOGO升级了! ps图标没有描边了
  3. android146 360 病毒查杀
  4. 如何把Access转成SQL Server的方法介绍
  5. Pell数列(信息学奥赛一本通-T1202)
  6. 支付宝上线“老年版相互宝”:爸妈终于可以加入了
  7. android恢复联系人,如何从Android手机恢复联系人[最佳方式]
  8. S11 day 94 RestFramework 之 APIView视图
  9. 2012.5.4号--关于125k(简易读卡和低频唤醒)
  10. 2021-08-20JSP内置对象及作用域
  11. 火影忍者ol服务器维护中,火影忍者ol3月31日更新了什么?维护到几点?新增神无毗桥模拟战...
  12. 美萍系统怎么修改服务器时间,局域网中如何架设美萍VOD视频点播系统服务器
  13. truncate table(截断表)
  14. 什么是 VXLAN 技术?
  15. 洛谷 P5713 【深基3.例5】洛谷团队系统 C语言
  16. 利用easyX图形库画迷宫问题的路径
  17. Hdu 4503 湫湫系列故事——植树节
  18. 如何判断两个随机变量是否独立,同分布
  19. 怎样识别三洋18650锂电池电芯
  20. 专升本英语——英语的九种时态总结

热门文章

  1. 【NOI2019】 机器人 【区间dp】【插值】【下降幂多项式】【分段函数】
  2. 2018 ACM-ICPC World Finals Problem D.Gem Island
  3. D - ABC Conjecture Gym - 102798D
  4. 盲盒(随机概率 + 最大公约数)
  5. CF1408D:Searchlights
  6. P3170-[CQOI2015]标识设计【插头dp】
  7. 【模板】最大密度子图
  8. 【期望DP】概率充电器(luogu 4284)
  9. 【单调队列】【DP】城市交通(jzoj 1749)
  10. 【DP】【记忆化搜索】NIKOLA(jzoj 1150)