XML简介以及XML的解析


一、XML的概述(了解)
* eXtensible MarkuP Language 可扩展标记语言
* 宗旨是传输数据,而非显示数据。
* XML标签没有被预定义,需要用户自行定义标签
* XML技术是W3C组织(WorldWideWeConsortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布的XML1.0规范。
* 作用: a. 传输数据
b. 配置文件(主要用途)


二、XML的语法(掌握)
* <?xml version=“1.0”?> 文档声明必须出现在第一句
* 一个标签有如下两种书写形式:
包含标签主体:<mytag>some content</mytag>
不含标签主体:<mytag/>
* 一个XML文档必须有且仅有一个标签
* XML中不会忽略主体内容中出现的空格和换行。
* 严格区分大小写
* <!--这是注释-->
* CDATA : 把标签当做普通文本内容
<![CDATA[
<itcast>www.itcast.cn</itcast>
]]>
*XML编码原理:



三、XML的约束(看懂即可,掌握引入外部约束文件的语句)
* DTD
*分类
格式良好的XML:遵循XML语法的XML
有效的XML:遵循约束文档的XML

约束文档定义了在XML中允许出现的元素名称属性及元素出现的顺序等等。

注意:dtd文档必须用utf-8编码格式保存

* 校验XML的有效性
* 非校验解析器 参见validator.html
* 校验解析器

* DTD 文件的引入:
当引用的DTD文档在本地时,采用如下方式:<!DOCTYPE 根元素 SYstem “DTD文档路径”>
当引用的DTD文档在公共网络上时,采用如下方式:
<!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”>
eg : <!DOCTYPE web-app PUBLIC
"-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

* DTD文件的语法
在DTD文档中使用ELEMENT关键字来声明一个XML元素。
如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。
如果子元素用“|”分开,说明任选其一

用+、*、?来表示元素出现的次数
定义属性:
<!ATTLIST 元素名
属性名1 属性值类型 设置说明
属性名2 属性值类型 设置说明>

* Schema(难)

四、XML的解析(掌握)
* 解析的方式
* DOM 解析 : Document Object Model ,文档对象模型。这种方式是 W3C 推荐的处理 XML 的一种方式。

* SAX 解析 : Simple API for XML。这种方式不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它。
两种解析方式的区别:1.DOM解析一次性将xml文件加载进入内存,形成dom树,这样的缺点是xml文件较大时,占用内存很大,容易发生内存溢出的状况
2.SAX解析式一种边加载边解析的方式,占用系统资源少。但是缺点是只能对xml文件进行加载读取查询,不能进行增删改的操作。
* 解析包
* JAXP (sun 公司提供): (Java API for XML Processing) 开发包是 JavaSE 的一部分
DOM方式: 使用JAXP进行DOM解析的过程图解:
DOM方式解析步骤:
1.调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂
2.调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象
3.调用DOM解析器对象的parse()方法解析XML文档,得到代表整个文档的Document对象,利用DOM特性对整个XML文档进行操作
如果需要重新保存修改后的数据到xml,则要涉及到xml写入硬盘:使用到了Transformer类的transform方法
//把内存中修改后的dom树重新写入硬盘
Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.transform( new DOMSource(document), new StreamResult( "src/book.xml" ));
Transformer类简介: 此抽象类的实例能够将源树转换为结果树。 使用此实例处理来自不同源的 XML,并将转换输出写入各种接收器。
SAX方式解析
SAX解析步骤:
1.使用SAXParserFactory创建SAX解析工厂

SAXParserFactory spf = SAXParserFactory.newInstance();

2.通过SAX解析工厂得到解析器对象

SAXParser sp = spf.newSAXParser();

3.通过解析器对象得到一个XML的读取器

XMLReader xmlReader = sp.getXMLReader();

4.设置读取器的事件处理器

xmlReader.setContentHandler(new DefaltHandler(){ });

5.解析xml文件
xmlReader.parse("book.xml")
* DOM4j (第三方)

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念