XML基础_Java解析XML
1.1、XML是什么?
XML(可扩展标记语言)是一种很流行的简单的基于文本的语言来用作应用程序之间的通信模式。它被认为是传输标准装置和存储数据。JAVA提供了极好的支持和丰富的库来解析,修改或查询XML文档。
XML是一种简单的基于文本的语言,它被设计为储存和运输以纯文本格式的数据。它代表着可扩展标记语言。以下是一些XML的显着特征。 XML是一种标记语言。 XML是一种标记语言就像HTML一样。 XML标签不是像HTML那样预定义。 可以定义自己的标签,这就是为什么它被称为可扩展的语言。 XML标签被设计成自描述性的。 XML是W3C推荐用于数据存储和传输。
1.2、XML能干什么?
描述数据、存储数据、传输(交换)数据。
优缺点:
优势 以下是XML提供的优势: 技术无关 - 作为普通文本,XML是技术独立。它可以用于由任何技术进行数据的存储和传输的目的。 人类可读 - XML使用简单的文本格式。它是人类可读和可以理解的。 可扩展性 - 在XML,自定义标签可以创建和很容易使用。 允许验证 - 使用XSD,DTD和XML结构可以很容易地验证。 缺点 下面是使用XML的缺点: 冗余的语法 - 通常XML文件中包含大量的重复计算。 冗余 - 作为一个冗长的语言,XML文件大小增加了传输和存储成本。
1.3、XML与HTML区别
1、目的不一样 2、XML 被设计用来描述数据,其焦点是数据的内容。 3、HTML 被设计用来展示数据,其焦点是数据的外观。 4、HTML可以不关闭标签(即标签可以不成对出现),但XML必须关闭标签(即标签必须成对出现)。 5、HTML中的标签标识文本如何展示,而XML中的标签标识文本是什么含义(什么类型的文本)。 XML文档节点类型 文档(document) 元素(element) 属性(attribute) 文本(PCDATA–parsed character data) 注释(comment) DOCTYPE :主要验证文档内容的正确性 实体(ENTITIES) CDATA(character data)
1.4、XML语法
1、声明:<?xml version="1.0" encoding="UTF-8"?> 2、根节点:必须只能有一个根节点 3、标签:标签必须有结束且区分大小写,标签必须顺序嵌套 4、属性:必须引号引起值 5、空格会被保留,HTML空格最多保留一个 6、命名规则:命名必须见名知意 a)名字可包含字母、数字以及其他的字符 b)名字不能以数字或者标点符号开始 c)名字不能以字符“xml”(或者XML、Xml)开始 7、名字不能包含空格 8、 不应在 XML 元素名称中使用 “:” ,这是由于它用于命名空间(namespaces)的保留字。 9、标签优先于属性。 10、XML 命名空间可提供避免元素命名冲突的方法。 11、CDATA:字符数据,<![CDATA[字符数据]]> ,字符数据不进行转义
1.5、Xml约束
1.5.1、XML DTD 约束
DTD(DocType Definition 文档类型定义)的作用是定义 XML 文档的合法构建模块。它使用一系列的合法元素来定义文档结构。用于约定XML格式。
1.2、外部私有的 SYSTEM 一般是我们自己定义的,可能只是一个公司内部使用,,首先根据“命名空间”去问环境要相应的dtd文件,如果有,直接提供,如果没有再根据dtd文件位置找1.5.2、XML Schema 约束
XML Schema 是基于 XML 的 DTD 替代者。XML Schema 描述 XML 文档的结构。XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。 DTD不是通过XML语法定义文档结构, 不能定义数据类型和限制Schema通过XML语法定义文档结构,可以定义数据类型和限制
约定XML格式 定义可出现在文档中的元素 定义可出现在文档中的属性 定义哪个元素是子元素 定义子元素的次序 定义子元素的数目 定义元素是否为空,或者是否可包含文本 定义元素和属性的数据类型 定义元素和属性的默认值以及固定值 1、为何使用Schema XML Schema 是 DTD 的继任者 XML Schema 可针对未来的需求进行扩展 XML Schema 更完善,功能更强大 XML Schema 基于 XML 编写 XML Schema 支持数据类型和限制 XML Schema 支持命名空间
2、Schema引用方式
二、Java XML 教程
1、Java XML 解析器
1.1、什么是XML解析?
解析XML是指将通过XML文档访问数据或修改数据的一个操作或方法。
Java库中提供了两种XML解析器: 1、像文档对象模型(Document Object Model,DOM)解析器这的树型解析器(tree parse),它们将读入的XML文档转换 成树结构。 2、像XML简单API(Simple API for XML,SAX)解析器这样的流机制解析器(streaming parser),它们在读入XML文档时生 成相应的事件。
1.2、XML解析器是什么?
XML解析器提供方法来访问或修改XML文档中的数据。 Java提供了多种选择来解析XML文档。以下是各种类型解析器其通常用于解析XML文档。 Dom解析器 - 解析通过加载该文件的全部内容,并创建其完整分级树中存储的文件。 SAX解析器 - 解析基于事件触发器的文档。不完整(部分)的文件加载到存储器中。 JDOM解析器 - 解析以类似的方式,以DOM解析器但更简单的方法的文档。 StAX解析器 - 解析以类似的方式,以SAX解析器但在更高效的方式的文档。 XPath解析器 - 解析基于表达式XML并广泛选择使用XSLT。 DOM4J解析器 - Java库来解析XML,XPath和使用Java集合框架XSLT,为DOM,SAX和JAXP的支持。
2、Java DOM解析器
2.1、DOM解析器简介
文档对象模型是万维网联盟(W3C)的官方推荐。它定义了一个接口,使程序能够访问和更新样式,结构和XML文档的内容。支持DOM实现该接口的XML解析器。
何时使用? 在以下几种情况时,应该使用DOM解析器: 1、需要知道很多关于文档的结构 2、需要将文档的部分周围(例如,可能需要某些元素进行排序) 3、需要使用的文件中的信息超过一次
会得到什么? 当使用DOM 解析器解析一个XML文档,会得到一个树形结构,其中包含的所有文档的元素。 DOM提供了多种可用于检查文档的内容和结构的函数。
优势 DOM是用于处理文档结构的通用接口。它的一个设计目标是Java代码编写一个DOM兼容的解析器,运行在任何其他的DOM兼容的解析器不会有变化。
DOM接口 DOM定义了几个Java接口。这里是最常见的接口: 1、节点 - DOM的基本数据类型。 2、元素 - 要处理的对象绝大多数是元素。 3、Attr - 代表元素的属性。 4、文本 - 元素或Attr的实际内容。 5、文档 - 代表整个XML文档。文档对象是通常被称为DOM树。
常见的DOM方法 当正在使用DOM,有经常用到的几种方法: 1、Document.getDocumentElement() - 返回文档的根元素。 2、Node.getFirstChild() - 返回给定节点的第一个子节点。 3、Node.getLastChild() - 返回给定节点的最后一个子节点。 4、Node.getNextSibling() - 这些方法返回一个特定节点的下一个兄弟节点。 5、Node.getPreviousSibling() - 这些方法返回一个特定节点的前一个兄弟节点。 6、Node.getAttribute(attrName) - 对于给定的节点,则返回所请求的名字的属性。
2.2、Java DOM解析器 - 解析XML文档
使用DOM的步骤 以下是在使用DOM解析器解析文档使用的步骤。 1、导入XML相关的软件包。 2、创建DocumentBuilder 3、从文件或流创建一个文档 4、提取根元素 5、检查属性 6、检查子元素
document对象: 要操作XML,先就得有Document对象,把一个XML文件加载进内存的时候,在内存中形成所谓的一种树状结构,我们把这一个结构称之为DOM树.
注意: 我们在Java代码中所做的增/删/改/查操作,都仅仅是操作的是内存中的Document对象,和磁盘中的XML文件没有关系。比如:删除一个联系人信息之后,XML文件中数据依然存在,此时出现内存中的数据和磁盘文件中的数据不同步。所以,对于增删改操作,我们需要做同步操作(把内存中的数据和磁盘的XML文件数据保持一致)。 DOM:在第一次的时候就会把XML文件加载进内存,如果XML文件过大,可能会造成内存的溢出. DOM:在做增删改查操作的时候比较简单,,但是性能却不高(线性搜索).
3、Java SAX解析器
3.1、Java SAX解析器简介
SAX解析器在解析XML输入数据的各个组成部分时会报告事件,但不会以任何方式存储文档,而是由事件处理器建立相应的数据结构。实际上DOM解析器是在SAX解析器的基础上构建的,它在接收到解析器事件时构建DOM树。
SAX(针对XML的简单API)是基于事件为XML文档的解析器。不像DOM解析器,SAX解析器创建没有解析树。 SAX是一个流接口用于XML的,这意味着使用SAX应用接收事件通知有关XML文档被处理的元素,属性,在按顺序每次开始在文档的顶部,并与所述闭合结束根元素。 1、读取XML文件从上到下,构成一个结构完整的XML文档的标记 2、令牌以相同的顺序进行处理,它们出现在文档中 3、报告应用程序,因为它们所出现解析器遇到标记的特性 4、应用程序提供了必须的解析器注册的“事件”处理程序 5、作为标记标识,在处理程序回调方法相关信息调用
什么时候使用? 应该使用SAX解析器的时候: 1、可以在XML文档从上往下处理以线性方式 2、该文件并不深层次嵌套 3、处理一个非常大的XML文档,DOM树会占用太多的内存。典型DOM的实现使用10字节的存储器以表示XML的一个字节 4、解决的问题涉及的XML文档的一部分 5、数据是可用的,只要它是由解析器看出,这样的SAX可以很好地用于到达流的XML文档
SAX的缺点 1、它是在一个只进入处理随机访问方式XML文档 2、如果需要跟踪的数据分析器已经看到或更改项目的顺序,必须自已编写代码和数据存储
ContentHandler接口 此接口指定SAX解析器用来通知XML文档,已经看到部件应用程序的回调方法。
属性接口 这种接口指定用于处理连接到一个元素的属性的方法。 int getLength() - 返回属性的数目。 String getQName(int index) String getValue(int index) String getValue(String qname)
3.2、Java SAX解析器 - 解析XML文档
在使用SAX解析器时,需要一个处理器来为各种解析器事件定义事件动作。DefaultHandler接口定义了若干个在解析文档时解析器会调用的回调方法。下面是最重要的几个方法: 1、startElement和endElement在每当遇到起始或终止标签时调用。 2、characters在每当遇到字符数据时调用。 3、startDocument和endDocument分别在文档开始和结束时各调用一次。
4、Java StAX解析器
4.1、Java StAX解析器简介
StAX即Streaming API for XML,当前最有效的XML处理方法,因此特别适合于处理复杂流程,比如数据库绑定和SOAP消息。StAX创建的信息集是非常小,可以直接作为垃圾收集的候选对象。这让XML处理任务占用较小的空间,使得它不仅适用于小型堆设备,比如移动电话,而且适用于长期运行的服务器端应用程序。 与SAX不同,StAX能够对XML文档进行写操作,这减少了需要处理的API数量。 StAX提供两种不同的解析数据模型:光标模型和迭代器模型。
环境设置 为了使用StAX的解析器,应该准备好stax.jar在应用程序的类路径中。下载 stax-1.2.0.jar,以下是StAX API的功能: 1、读取XML文件从上到下,认识构成一个结构完整的XML文档的标记 2、令牌是以相同的顺序进行处理,它们出现在文档中 3、报告应用程序,因为解析器遇到标记的特性 4、应用程序提供了一个“事件”读取器充当了事件,以获得所需信息的迭代器和迭代。可另一个读取器是“光标”充当一个指向XML 节点。 5、由于事件被识别,XML元素可以从事件对象进行检索,并且可以进一步处理。
什么情况下使用?
应该使用的StAX解析器的时候: 1、可以处理在自上而下线性方式的XML文档。 2、文件并不深入嵌套。 3、处理一个非常大的XML文档的DOM树会占用太多的内存。典型的DOM的实现使用10字节的存储器以表示XML的一个字节。 4、要解决的问题涉及XML文档的一部分。 5、数据是可用的,只要它是由解析器处理,这样StAX可以很好地用于所收到超过数据流的XML文档。
SAX的缺点
1、因为它是在一个处理的方式,而不是随机访问XML文档。 2、如果需要跟踪的数据分析器已经看到或更改项目的顺序,必须编写代码和数据存储以自己方式处理。
XMLEventReader类
因为在解析XML文档时该类提供可用于迭代事件事件迭代器 1、StartElement asStartElement() - 用于检索值和元素的属性。 2、EndElement asEndElement() - 调用元件的端部。 3、Characters asCharacters() - 可用于获得字符,例如一个CDATA,空白等。
XMLEventWriter类
此接口指定创建事件的方法。 add(Event event) - 添加包含元素XML事件。
XMLStreamReader Class
因为在解析XML文档时该类提供可用于迭代事件事件迭代器 1、int next() - 用于检索下一个事件。 2、boolean hasNext() - 用于检查其他事件的存在与否 3、String getText() - 用于获取一个元素的文本 4、String getLocalName() - 用于获取一个元素的名称
XMLStreamWriter类
此接口指定创建事件的方法 1、writeStartElement(String localName) - 加入定名称开始元素。 2、writeEndElement(String localName) - 添加指定名称的结束元素。 3、writeAttribute(String localName, String value) - 编写属性到元素。
5、Java XPath解析器
5.1、Java XPath解析器简介
XPath是万维网联盟(W3C)的官方推荐。它定义了一个语言在XML文件中查找信息。它被用于遍历XML文档的元素和属性。 XPath提供各种类型,可用于从XML文档查询相关的信息表现形式。
什么是XPath?
结构定义 - XPath定义像元素,属性,文本,命名空间,处理指令,注释和文档节点的XML文档部分 路径表达式 - XPath提供了强大的路径表达式选择的节点或在XML文档中的节点列表。 标准功能 - XPath提供了丰富的标准函数库操纵字符串值,数值,日期和时间比较,节操作,顺序操作,布尔值等。 XSLT重要组成部分 - XPath是在XSLT标准的主要元素之一,是必须有知识,以便使用XSLT的文档。 W3C推荐 - XPath是万维网联盟(W3C)的官方推荐。
XPath表达式
XPath使用路径表达式从XML文档中选择一个或多个节点的列表。以下是有用的路径和表达,从XML文档选择节点的任何节点/列表清单。
6、Java DOM4J解析器
6.1、Java DOM4J解析器解析
DOM4J是一个开源的,基于Java的库来解析XML文档,它具有高度的灵活性,高性能和内存效率的API。这是java的优化,使用Java集合像列表和数组。它可以使用DOM,SAX,XPath和XSLT。它解析大型XML文档时具有极低的内存占用。
环境设置 为了使用DOM4J解析器,应该 dom4j-1.6.1.jar 和 jaxen.jar 在应用程序的类路径中。下载 dom4j-1.6.1.zip.
什么情况下使用? 应该考虑使用DOM4J解析器的时候: 1、需要知道很多关于文档的结构 2、需要将文档的部分围绕(例如,可能需要某些元素进行排序) 3、需要使用的文件中的信息超过一次 4、你是一个Java开发人员,并希望利用XML的Java的优化解析。
会得到什么? 当解析一个DOM4J解析XML文档,可以灵活地得到一个树形结构,其中包含所有文档的元素,而不会影响应用程序的内存占用。DOM4J提供了多种可用于检查的情况下文档内容和结构的实用功能是良好的结构,其结构是公知的。 DOM4J使用XPath表达式来浏览XML文档。
优势 DOM4J使Java开发的灵活性和XML解析代码易于维护。它是轻量级的,快速的API。
DOM4J 类 DOM4J定义了几个Java类。以下是最常见的类:
类 说明
Document 表示整个XML文档。文档Document对象是通常被称为DOM树。
Element 表示一个XML元素。 Element对象有方法来操作其子元素,它的文本,属性和名称空间。
Attribute 表示元素的属性。属性有方法来获取和设置属性的值。它有父节点和属性类型。
Node 代表元素,属性或处理指令
常见DOM4J的方法 当使用DOM4J,还有经常用到的几种方法:
方法 方法说明
SAXReader.read(xmlSource)() 构建XML源的DOM4J文档。
Document.getRootElement() 得到的XML的根元素。
Element.node(index) 获得在元素特定索引XML节点。
Element.attributes() 获取一个元素的所有属性。
Node.valueOf(@Name) 得到元件的给定名称的属性的值。
注解简介Java笔记
最新推荐文章于 2024-10-30 18:07:32 发布