本帖最后由 小石姐姐 于 2018-5-23 16:50 编辑
XML
#什么是XML?
* XML 指可扩展标记语言(EXtensible Markup Language)
* XML 是一种标记语言,很类似 HTML
* XML 被设计用来描述数据
* XML 标签没有被预定义。您需要自行定义标签。
* XML 使用文件类型声明(DTD)或者 XML Schema 来描述数据。
* 带有 DTD 或者 XML Schema 的 XML 被设计为具有自我描述性。
* XML 是一个 W3C 标准
#xml的作用:
* 传输 和 存取数据.
* 软件的配置文件.
** 以前作为数据交换的文件,现在主要最为程序的配置文件
1.XML的基本语法:
* 允许用户自定义标签
* XML必须有关闭标签
* 区分大小写
* 属性必须加引号
* 标签必须正确嵌套
* 文档必须有根元素
2.XML的文档声明
* 文档声明:通常出现在XML的第一行第一列的位置!!!(定格位置);
** 写法:
<?xml 属性名="属性值" 属性名="属性值"?>
*** version : 必须的, 使用"1.0"
*** encoding: 字符集,是使用浏览器打开的时候才用的默认的字符集的编码;
*** standalone:描述XML文档是否需要依赖其它的文件(基本不用);
**** 例:
* <?xml version="1.0" encoding="UTF-8"?>
* 在eclipse中新建xml文档时就会自动添加声明
3.xml的注释
<!-- XML的注释 -->
4.XML的元素
* 元素(标签)的命名规范:
**名字可包含字母、数字以及其他的字符
**名字不能以数字或者标点符号开始
**名字不能以字符“xml”(或者XML、Xml)开始
**名字不能包含空格
**名称不能包含冒号
5.在XML中有5个预定义的实体引用:
< < 小于
> > 大于
& & 和号
' ' 省略号
" " 引号
6. CDATA的作用: 在它的内容中可以正常的写特殊字符,不需实体引用
<![CDATA[ 内容 ]]>
* 原因:
**所有 XML 文档中的文本均会被解析器解析。只有 CDATA 区
段 CDATA section)中的文本会被解析器忽略.
7.XML的解析的方式有哪几种?(*****):(面试题)
* 两种 : DOM,SAX
* DOM解析:DOM:Document Object Model.
* SAX解析:Simple Api for XML.
* DOM和SAX的区别:
** DOM:一次性将文档加载到内存,形成树形结构进行解析
缺点:如果文档特别大,容易导致内存的溢出
优点:对XML进行增删改的操作
** SAX: 事件驱动的方式,一行一行进行解析的
缺点:不能对文档进行增删改的操作
优点:如果文档特别大,不会导致内存的溢出.
8.针对这两种解析的方式,不同的公司提供了不同的API的实现.(xml解析工具)
#下面这些技术中都有DOM和SAX的解析
* JAXP :SUN公司提供的一套XML的解析的API.(针对DOM和SAX都有不同的API);
* JDOM :开源组织提供了一套XML的解析的API-jdom.
* DOM4J :开源组织提供了一套XML的解析的API-dom4j.
* pull :主要应用在Android手机端解析XML.
9.DOM4J的入门案例步骤:
#使用DOM4j解析文档
* 【步骤一】导入jar包.dom4j-1.6.1.jar (它的核心包)
* 【步骤二】创建解析器(1.SAXReader 2.DOMReader 两种,一般使用saxreader)
SAXReader reader = new SAXReader();
* 【步骤三】解析文档获得代表文档的Document对象.
** 整个文档加载到内存后就可称为是一个Document对象
Document document = reader.read("xml/demo1.xml");
//传入文件路径
* 【步骤四】获得跟节点.
Element root = document.getRootElement();
System.out.print(root.getName());//输出跟结点名
* 【步骤五】从跟节点下查找其他的节点.
//element()
//elements()
Element pElement = root.element("person");//查找的是第一个person元素
root.elements("person").get(1); // 查找的是第二个person元素
Element nElement = pElement.element("name");//查找person下的name元素
System.out.println(nElement.getText());//输出name元素中的文本
* sun公司通的API只支持上边的这些功能,使用起来比较麻烦
* 使用XPath就比较方方便了,DOM4j也支持它
9.2.SAXReader 其实是结合了DOM和SAX两种解析(都有使用);
9.3.dom4j也有增删改的功能,但一般不适用,因为现在数据都放在数据库中,
如果使用的话查帮助文档就行.
9.4它的增删该操作,操作的只是内存中的数据,如果想保存的话,就要报数据保存村到文档,
* 有两种数据到文档的格式:
** 一: 美化格式 :将格式调的特别漂亮.
** 二: 缩减格式 :传输数据用,对文档进行了压缩,去掉了多余的空格
10.XPath
10.1使用XPath的前提是你正在使用的解析xml文档的API支持XPath
* dom4j支持XPath的jar包.
* jaxen-1.1-beta-6.jar
* dom4j的XPath支持的API: (只有这两个方法支持xpath)
* List document.selectNodes(String xPath);
* Node document.selectSingleNode(String xPath);
10.2XPath的使用步骤
* 1. 导入dom4j支持XPath的jar包,jaxen-1.1-beta-6.jar
* 2. 创建解析器
SAXReader reader = new SAXReader();
* 3.获取Document对象
Documert document = reader.read("xml/demo1");
* 4.调用xpath方法查询标签
//获取所有的name 元素
List<Node> list = document.selectNodes("//name");
//获取当个元素
10.3简单语法:(具体查看xpath帮助文档)
* 单斜杠/ 描述层级关系
* 双斜杆// 表示不分层级,所有层级
* 中括号 [@属性] 表示具有该属性的元素
10.4.parse
SAXParseException(解析异常)
11.XML的约束
#一共两种约束:
* DTD .dtd 后缀的文件
* Schema .xsd 后缀的文件 / 也可是 .xml 后缀
** Schema约束文档是通过命名空间中w3c区分的
*** w3c名称空间不带instance的为约束文档
*** w3c名称空间带-instance的为被约束的文档
11.1XML的约束的概述:
* 什么是XML的约束:
** 就是用来约束XML的文档中可以出现哪些标签,
不能出现哪些标签,标签中是否有顺序,出现的次数.
* XML的约束作用:
** 用来规范XML的写法.
11.2XML的约束的种类及区别?
* DTD 和 Schema :
* 区别:
1.DTD语法是自成一体的.Schema语法就是XML的语法.
2.Schema的语法就是XML的语法所以更容易被解析器所解析.
3.Schema支持名称空间.
4.Schema有比DTD更加强大的语义和语法的约束.
* DTD只能约束内容是不是字符串和出现次数;
* Schema 还可以约束整型,flout,double,以及整型
数出现的范围(例如:将年龄设置为1-120之间)
* DTD中存的都是字符串
11.2.1.DTD(文档类型定义)的作用是:
* 定义 XML 文档的合法构建模块。
11.2.2.Schema (.xsd)结尾的文档
* 是基于 XML 的 DTD 替代者。
* XML Schema 描述 XML 文档的结构。
* XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。
* 它使用一系列的合法元素来定义文档结构。
11.3.DTD的语法 :(了解) (.dtd)结尾的文档
11.3.1.DTD的引入方式:(约束文档,被约束文档,加入约束的方式)
* 内部的DTD:
<!DOCTYPE persons [
]>
* 外部的DTD:
* 一种本地DTD:
<!DOCTYPE persons SYSTEM "unknown.dtd">
* 一种网络DTD: 例如: 一些框架,已经将DTD发部到了网站上,使用时只需要写上网址就行.
<!DOCTYPE persons PUBLIC "//UNKNOWN/" "unknown.dtd">
** //UNKNOWN/ 为dtd的名称
** "unknown.dtd" 为dtd所在的网络路径
11.3.2.DTD的语法:
* 元素:
* <!ELEMENT 元素名 元素类型>
* 元素类型:
* EMPTY 空
* ANY 任意
* 子元素
* 是否有序: 使用 逗号(,)或者竖线(|)表示. (逗号表示有序,竖线表示或者)
* 出现的次数:?:零次或一次 +:一次或多次 *:零次或多次
* PCDATA :可解析的字符数组(如果元素内就是文本,那写PCDATA就行了)
* 属性:
* <!ATTLIST 元素名称 属性名称 属性的类型 属性的约束>
* 属性的类型:
* ID类型:表示属性值需要是唯一的.
* CDATA类型:普通的字符串.
* 枚举:
* 属性的约束:
1. #REQUIRED 属性值是必需的
2. #IMPLIED 属性不是必需的
3. #FIXED value 属性值是固定的
12.Schame约束
12.1Schame 的名称空间:
<!--
* 名称空间:一个XML只能引入一个DTD约束文档.使用了Schema约束XML文档,
一个XML可以引入多个Schame的约束!!!
* 如果再多个Schema文档中定义了相同的属性名称 该怎么办?
** 名称空间类似于java中的package.通过名称空间区分 标签或属性来
自于哪个文档的!!!通常名称空间唯一的不重复的即可.一般情况下使
用一个URL地址表示一个名称空间;
** 给名称空间取一个别名,在标签上加上空间别名,用于区分使用的是哪个空间的约束;
xmlns :xml name sapace .代表当前的文档应用的名称空间.
targetNameSpace :目标名称空间.
elementFormDefault :有两个参数 1. qualified 质量好的:父标签加了名称空间,子标签也要加
2. unqualified 质量不好的:父标签加了子标签就不用加了
* 一般使用qualified 结构清晰
-->
12.2.一个xml可以引入多个名称空间,每个名称空间都定义了一些约束,
因此每个名称空间要取一个别名;
|
|