XML和Dom4j、正则表达式

  • 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" ?>

  1. 文档声明可以不写

  2. 文档声明必须为<?xml开头,以?>结束

  3. 文档声明必须从文档的1行1列位置开始

  4. 文档声明中常见的两个属性:

  • version:指定XML文档版本。必须属性,这里一般选择1.0;

  • enconding:指定当前文档的编码,可选属性,默认值是utf-8;

元素\标签

  1. 元素是XML中最重要的组成部分,元素也叫标签

  2. 标签分为开始标签和结束标签,开始标签<名字> 结束标签</名字>

  3. 开始标签和结束标签中间写的是标签内容,标签的内容可以是文本,也可以是其他标签

  4. 如果标签没有任何内容,那么可以定义空标签(比如:<名字/>)

  5. 标签可以嵌套,但是不能乱嵌套

  6. 一个XML文件只有一个根标签

  7. 命名规则: ​ 不要使用XML xML xml 写样的单词

    不能使用空格,冒号

    命名区分大小写

    数字不能开头

属性

  1. 位置: 属性是元素的一部分,它必须出现在元素的开始标签中,不能写在结束标签中

  2. 格式: 属性的定义格式:属性名=“属性值”,其中属性值必须使用单引或双引号括起来

  3. 一个元素可以有0~N个属性,但一个元素中不能出现同名属性

  4. 属性名不能使用空格 , 不要使用冒号等特殊字符,且必须以字母开头

转义字符

因为有些特殊的字符在XML中是不会被识别的,所以在元素体或属性值中想使用这些符号就必须使用转义字符(也叫实体字符),例如:">"、"<"、"'"、"""、"&"。

在 XML 中仅有字符 "<"和"&" 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。

<price> 香蕉的价格: price > 5 &amp;&amp;  price &lt; 10</price>

  • 开发中比较常见的解析方式有三种,如下:

    1. DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象

      a)优点:元素与元素之间保留结构关系,故可以进行增删改查操作。

      b)缺点:XML文档过大,可能出现内存溢出

    2. SAX:是一种速度更快,更有效的方法。她逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都触发对应的事件。(了解)

      a)优点:不会出现内存问题,可以处理大文件

      b)缺点:只能读,不能回写。

    3. 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;
        }

正则表达式-字符类

  • 语法示例:[] 表示匹配单个字符 ^ 取反 - 范围

    1. [abc]:代表a或者b,或者c字符中的一个。

    2. [^abc]:代表除a,b,c以外的任何字符。

    3. [a-z]:代表a-z的所有小写字符中的一个。 左右包含

    4. [A-Z]:代表A-Z的所有大写字符中的一个。

    5. [0-9]:代表0-9之间的某一个数字字符。

    6. [a-zA-Z0-9]:代表a-z或者A-Z或者0-9之间的任意一个字符。

    7. [a-dm-p]:a 到 d 或 m 到 p之间的任意一个字符。

正则表达式-预定义字符

  • 语法示例:

    1. "." : 匹配任何字符。如果要表示一个字符点,那么就得使用\\.

    2. "\d":任何数字[0-9]的简写;

    3. "\D":任何非数字[^0-9]的简写;

    4. "\s": 空白字符:[ \t\n\x0B\f\r] 的简写

    5. "\S": 非空白字符:[^\s] 的简写

    6. "\w":单词字符:[a-zA-Z_0-9]的简写

    7. "\W":非单词字符:[^\w]

正则表达式-数量词

  • 语法示例:

    1. X? : 0次或1次

    2. X* : 0次到多次

    3. X+ : 1次或多次

    4. X{n} : 恰好n次

    5. X{n,} : 至少n次,包含n

    6. X{n,m}: n到m次(n和m都是包含的)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值