一、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文件较大时,占用内存很大,容易发生内存溢出的状况
* 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文件较大时,占用内存很大,容易发生内存溢出的状况
* 解析包
* JAXP (sun 公司提供): (Java API for XML Processing) 开发包是 JavaSE 的一部分
* JAXP (sun 公司提供): (Java API for XML Processing) 开发包是 JavaSE 的一部分
DOM方式:
使用JAXP进行DOM解析的过程图解:
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 (第三方)