PS:第一次用markdown编辑器来编辑,发现它真是其乐无穷啊。嘿嘿,谁用谁知道@-@

1. XML是什么

  • XML 指可扩展标记语言(EXtensible Markup Language)
  • XML 被设计用来结构化、存储以及传输信息。
  • XML 的设计宗旨是传输数据,而非显示数据,HTML被设计来显示数据,二者不可相互替代
  • XML 标签没有被预定义。您需要自行定义标签。
  • XML 没什么特别的。它仅仅是纯文本而已。有能力处理纯文本的软件都可以处理 XML。

这里先给出一个XML文件,下面的讲解以此为例来说明

<?xml version="1.0" encoding="UTF-8"?>
<product wangke="king">  <car><name>Lamborghini</name><number>鄂A:88888</number><firm name="Automobili"><address>意大利圣亚加塔·波隆尼</address><value>10billion</value></firm><birthday>2017</birthday><lifeSpan>20</lifeSpan></car>  <car><name>Ferrari</name><number>鄂A:99999</number><firm name="恩佐·法拉利"><address>意大利马拉内罗</address><value>30billion</value></firm><birthday>2018</birthday><lifeSpan>30</lifeSpan></car>
</product>

2.Java中的XML描述对象

1.Node

Node接口是最基本的一个接口,相当于Java中的Object对象,其他所有的XML组成元素都继承自这个接口。这个接口主要用来描述XML其他所有组成元素的公共属性和公共操作。
Node中有很多static short类型的字段,这些字段表示某一个节点具体是什么类型的Node。比如,若该节点是一个Element,则类型为ELEMENT_NODE;若该节点是一个Text,则类型为TEXT_NODE。

2.Element

Element接口用来描述XML中的一个元素,可以理解为HTML中的一个标签,如示例中的

<name>Ferrari</name>

3.Text

Text接口继承自CharacterData,并且表示Element或Attr的文本内容(在XML中称为字符数据),如果元素的内容中没有标记,则文本是一个Text类型的对象中。否则将继续对文本进行解析。

4.Attr

Attr表示Element对象中的属性,由于它不是它们描述元素的子节点,DOM不会将它们作为文档树的一部分,所以Node属性的parentNode,previousSibling和nextSibling作用于Attr对象时返回null。
如下,这个节点中的name=”Automobili”就是一个Attr类型的Node。

<firm name="Automobili">

5.Document

表示整个XML文档,它是文档树的根,并提供对文档数据的基本访问。

6.Root节点

其实Java中没有描述根节点,因为根节点也是一个Element,每个XML文档中有且仅有一个根节点,就是包裹在最外层的Element。很多解析XML的框架都有document.getRootElement()方法,返回的就是一个根节点。Java API自带的org.w3c.dom 中document.getFirstChild(),也是返回根节点。

特别注意:每个Element的前后都有一个Text类型的Node,不要以为上下两个Element之间有换行,没有任何文本,就以为它们之间没有Node,以下图为例:

进一步挖掘这句话可以得出一个结论:任何一个Element,调用其getFirstChild()都将返回一个Text类型的Node。(尽管它可能在视觉上表现为一个换行)

Node root=document.getFirstChild();
NodeList nodes=root.getChildNodes();
System.out.println(nodes.getLength());  //输出子节点个数为5,而不是2
root.getFirstChild.getNextSibling(); //这样才返回第一个car元素

还需要特别注意Node中的如下三个属性和对应的get方法,nodeName,nodeValue,attributes
W3C上是这样说明的:
属性nodeName,nodeValue,attributes作为一个获取节点信息的机制,无需向下强制转换为特定的派生接口,在没有对特定的nodeType(如Element的nodeValue或Comment的attributes)的属性进行显式映射的情况下,这将返回null。注意,特定的接口可能包含其他更方便的机制来获取和设置相关信息。

上面的话可以这样简单来理解:某一种类型的node若没有特殊实现其getNodeValue()(或者getAttributes()等方法),默认返回null。但需要注意的是,一个node一定有类型和名称,所以getNodeType()和getNodeName()是一定有返回值的。

举个栗子:如果一个Node是Text类型,则getNodeValue()返回其文本内容,否则返回null,因为只有Text类型的Node实现了getNodeValue()方法(也就是说,getNodeValue()方法只能获取到Text类型的Node中的数据)

下面是本人写的一个简单的递归遍历所有的Text类型的Node(原谅我的懒,最近实在项目缠身。日后一定抽空完善),在此基础上加工一下就可以实现从XML中解析出一个Java实体类。

public static void ergodic(Node node,Map<String, String> map){if(node.getNodeType()==Node.TEXT_NODE){System.out.println(node.getParentNode().getNodeName()+":"+((Text)node).getWholeText());return;}NodeList list=node.getChildNodes();for(int i=0;i<list.getLength();++i){ergodic(list.item(i), map);}
}

四种(框架)解析方法正在更新中……

XML基础知识及四种解析方法相关推荐

  1. php xml 四种,xml中常见的四种解析方式是什么?

    xml解析方式有:1.DOM解析方法,可以对xml文档进行修改操作:2.SAX解析方法,解析速度快,占用内存少:3.JDOM解析方法,查找方便:4.DOM4J解析方法,解析XML的速度快. 在XML的 ...

  2. php xml对象解析_php解析xml 的四种简单方法(附实例)

    XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. ...

  3. XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较

    6月20日 XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较  1:DOM     DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准.DOM 是以层次结 ...

  4. 【框架学习】XML四种解析方案

    目前比较有名的 xml解析方式有: (1).DOM (2).SAX (3).JDOM (4).DOM4J 一.DOM解析 DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次 ...

  5. 用python解析xml的几种方法,Python_XML的三种解析方法

    什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这 ...

  6. ps抠图基础篇:最常用的四种抠图方法

    ps抠图基础篇:最常用的四种抠图方法 一.善用魔术棒法 用魔法帮抠图是最直观明了的抠图方法,也是最基础的抠图方法,适用范围是图像和背景色差非常明显,背景颜色单一,图像边界清晰. 魔法棒抠图就是通过删除 ...

  7. 聚类分析基础知识总结及实战解析

    聚类分析基础知识总结及实战解析 聚类分析是没有给定划分类别的情况下,根据样本相似度进行样本分组的一种方法,是一种非监督的学习算法.聚类的输入是一组未被标记的样本,聚类根据数据自身的距离或相似度划分为若 ...

  8. AAC音频基础知识及码流解析

    AAC音频基础知识及码流解析 目录 AAC简介 AAC规格简介 AAC特点 AAC音频文件格式及代码解析 AAC元素信息 AAC文件处理流程 AAC解码流程 技术解析 1. AAC简介 AAC是高级音 ...

  9. ipa解包打包工具_ios打包ipa的四种实用方法(.app转.ipa)

    总结一下,目前.app包转为.ipa包的方法有以下几种: 1.Apple推荐的方式,即实用xcode的archive功能 Xcode菜单栏->Product->Archive->三选 ...

  10. 古琴入门基础知识【古琴打谱的方法一】——唐畅古琴

    古琴的曲谱,从明初起,被保存下来的据近年中央民族音乐研究所收集和调查所得,谱集方面达一百四十四种之多,其中略去重复,共有三千三百六十五个不同的传谱,六百五十八个不同的传曲,数量真不算少. 然古人所制的 ...

最新文章

  1. 邮件客户端WebMail Pro v7.7.5发布,在线订购限时75折优惠!
  2. SQL2008修改并保存表结构时报错的解决(阻止保存要求重新创建表的更改)
  3. 程序猿职业生涯的迷惘与野望
  4. USACO 3.1 Agri-Net 最短网络 (最小生成树)(克鲁斯卡尔算法)
  5. 如何构建高并发高可用的剧场直播云端混流服务?
  6. element-ui表单验证:用户名、密码、电话、邮箱
  7. 【opencv有趣应用】opencv + YOLOV3 + COCO数据集的简单应用
  8. raspberry pi_前5名:替代密码,Raspberry Pi进入太空等等
  9. JS记坑 ----- 在父节点中添加删除子节点
  10. hadoop之 Zookeeper 分布式应用程序协调服务
  11. 还不会回答Spring Boot和Spring MVC的关系?大厂Java高级面试官告诉你答案!
  12. spring boot安装环境步骤及问题解决方式
  13. cocos creator 数组_5Cocos Creator 脚本简介
  14. GB35114---SM3withSM2证书生成及读取(一)
  15. 新点软件怎么导入清单_新点清单造价怎么导入电脑桌面上
  16. 云学python (第二章用编程改造世界·小练习)《vamei-从Python开始学编程》
  17. CSS第三章:10.调整字体:字体加粗;(持续更新)
  18. Mac终端解压缩命令大全
  19. 数据结构栈的简单实现(JAVA)
  20. 森林防火综合解决方案

热门文章

  1. 我第一个用DirextX做的2D游戏——炮炮兵考眼力
  2. 帮助台湾?匿名者组织攻击联合国和世界卫生组织网站
  3. 数据仓库和数据集市详解:ODS、DW、DWD、DWM、DWS、ADS
  4. html 通知页面,12款体验不错的网站提示/通知样式
  5. 使用 NetCat 工具实现远程文件传输
  6. 数论基础题(1) 费马引理+卡特兰数+Lucas定理+同余方程+扩欧
  7. java web服务_如何用Java实现Web服务器
  8. PMP工作绩效数据、信息和报告三者的区别
  9. iOS9.0 新功能
  10. 计算机word表格怎么求和,【Word文档怎么求和】- 虎课网