-
XML 指可扩展标记语言(EXtensible Markup Language)
-
XML是用来存储数据, 传输数据的,不是用来显示数据的。之后学习另外一个HTML是用来显示数据的。
-
XML 标签没有被预定义。您需要自行定义标签。
-
XML 是 W3C 的推荐标准
W3C在1988年2月发布1.0版本,2004年2月又发布1.1版本,但因为1.1版本不能向下兼容1.0版本,所以1.1没有人用。同时,在2004年2月W3C又发布了1.0版本的第三版。我们要学习的还是1.0版本。
-
XML 与 HTML 的主要差异
-
html语法松散,xml语法严格,区分大小写
-
html做页面展示,xml传输数据,存储数据
-
html所有标签都是预定义的,xml所有标签都是自定义的
xml的作用
-
==作为配置文件。== javaee框架 ssm大部分都会使用xml作为配置文件
-
XML可以存储数据 , 作为数据交换的载体(使用XML格式进行数据的传输)。
-
一个标准XML文件一般由以下几部分组成:文档声明、元素、属性、注释、转义字符、字符区。
-
XML的注释,既以
<!--
开始,-->
结束。 -
注释不能嵌套
-
idea上快捷键:
ctrl + /
<?xml version="1.0" encoding="utf-8" ?>
-
文档声明可以不写
-
文档声明必须为<?xml开头,以?>结束
-
文档声明必须从文档的1行1列位置开始
-
文档声明中常见的两个属性:
-
version:指定XML文档版本。必须属性,这里一般选择1.0;
-
enconding:指定当前文档的编码,可选属性,默认值是utf-8;
元素\标签
-
元素是XML中最重要的组成部分,元素也叫标签
-
标签分为开始标签和结束标签,开始标签<名字> 结束标签</名字>
-
开始标签和结束标签中间写的是标签内容,标签的内容可以是文本,也可以是其他标签
-
如果标签没有任何内容,那么可以定义空标签(比如:<名字/>)
-
标签可以嵌套,但是不能乱嵌套
-
一个XML文件只有一个根标签
-
命名规则: 不要使用XML xML xml 写样的单词
不能使用空格,冒号
命名区分大小写
数字不能开头
属性
-
位置: 属性是元素的一部分,它必须出现在元素的开始标签中,不能写在结束标签中
-
格式: 属性的定义格式:属性名=“属性值”,其中属性值必须使用单引或双引号括起来
-
一个元素可以有0~N个属性,但一个元素中不能出现同名属性
-
属性名不能使用空格 , 不要使用冒号等特殊字符,且必须以字母开头
转义字符
因为有些特殊的字符在XML中是不会被识别的,所以在元素体或属性值中想使用这些符号就必须使用转义字符(也叫实体字符),例如:">"、"<"、"'"、"""、"&"。
在 XML 中仅有字符 "<"和"&" 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。
<price> 香蕉的价格: price > 5 && price < 10</price>
-
开发中比较常见的解析方式有三种,如下:
-
DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象
a)优点:元素与元素之间保留结构关系,故可以进行增删改查操作。
b)缺点:XML文档过大,可能出现内存溢出
-
SAX:是一种速度更快,更有效的方法。她逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都触发对应的事件。(了解)
a)优点:不会出现内存问题,可以处理大文件
b)缺点:只能读,不能回写。
-
PULL:Android内置的XML解析方式,类似SAX。(了解)
-
解析包
-
JAXP:sun公司提供支持DOM和SAX开发包
-
Dom4j: 比较简单的的解析开发包(常用),
-
JDom:与Dom4j类似
-
Jsoup:功能强大DOM方式的XML解析开发包,尤其对HTML解析更加方便(项目中讲解)
XML DOM 和 HTML DOM一样,XML DOM 将整个XML文档加载到内存,生成一个DOM树,并获得一个Document对象,通过Document对象就可以对DOM进行操作。
1.创建解析器对象: SAXReader sr = new SAXReader();
2.读取xml文件进行解析,生成Document对象---使用SAXReader方法
Document read(String fileName);
3.使用Document对象获取根元素
Element getRootElement();
4.使用元素获取子元素--->使用Element方法
public List elements() : 获取当前元素的所有子元素
public String getName() : 获取元素的元素名
public String getText() : 获取当前元素的文本值
public String attributeValue(String name) : 获取当前元素下某个属性的值,传入属性名
public Element element(String name) : 根据元素名获取指定子元素(如果有多个就获取到第一个)
public String elementText(String name) : 获取指定子元素的文本值,参数是子元素名称
XPath使用步骤
步骤1:导入jar包(dom4j和jaxen-1.1-beta-6.jar)
步骤2:通过dom4j的SaxReader解析器对象,读xml文件,生成Document对象
步骤3: 利用Xpath提供的api,对XML文档中的标签或者属性进行解析操作。
document常用的api
-
document.selectSingleNode(String xpath); 获得一个节点(标签\元素)
-
document.selectNodes(String xpath); 获得多个节点(标签\元素)
正则表达式
-
在Java中,我们经常需要验证一些字符串,是否符合规则, 例如:校验qq号码是否正确,手机号码是否正确,邮箱是否正确等等。那么如果使用if就会很麻烦, 而正则表达式就是用来验证各种字符串的规则。它内部描述了一些规则,我们可以验证用户输入的字符串是否匹配这个规则。
-
先看一个不使用正则表达式验证的例子:下面的程序让用户输入一个QQ号码,我们要验证:
-
QQ号码必须是5--15位长度
-
而且必须全部是数字
-
而且首位不能为0
-
-
使用if判断方式验证:
-
// 定义一个方法,判断用户输入的qq号码是否符合规则
public static boolean checkQQ1(String qq){
//- QQ号码必须是5--15位长度
if (qq.length() < 5 || qq.length() > 15){
return false;
}//- 而且必须全部是数字
for (int i = 0; i < qq.length(); i++) {
char c = qq.charAt(i);
if (c < '0' || c > '9'){
return false;
}
}//- 而且首位不能为0
if (qq.charAt(0) == '0') {
return false;
}// 符合规则
return true;
}
正则表达式-字符类
-
语法示例:[] 表示匹配单个字符 ^ 取反 - 范围
-
[abc]:代表a或者b,或者c字符中的一个。
-
[^abc]:代表除a,b,c以外的任何字符。
-
[a-z]:代表a-z的所有小写字符中的一个。 左右包含
-
[A-Z]:代表A-Z的所有大写字符中的一个。
-
[0-9]:代表0-9之间的某一个数字字符。
-
[a-zA-Z0-9]:代表a-z或者A-Z或者0-9之间的任意一个字符。
-
[a-dm-p]:a 到 d 或 m 到 p之间的任意一个字符。
-
正则表达式-预定义字符
-
语法示例:
-
"." : 匹配任何字符。如果要表示一个字符点,那么就得使用
\\.
-
"\d":任何数字[0-9]的简写;
-
"\D":任何非数字[^0-9]的简写;
-
"\s": 空白字符:[ \t\n\x0B\f\r] 的简写
-
"\S": 非空白字符:[^\s] 的简写
-
"\w":单词字符:[a-zA-Z_0-9]的简写
-
"\W":非单词字符:[^\w]
-
正则表达式-数量词
-
语法示例:
-
X? : 0次或1次
-
X* : 0次到多次
-
X+ : 1次或多次
-
X{n} : 恰好n次
-
X{n,} : 至少n次,包含n
-
X{n,m}: n到m次(n和m都是包含的)
-