XML快速入门

XML

概念:可扩展标记语言

  1. 可扩展:标签都是自定义的

功能

  1. 存储数据

    1. 作为配置文件

    2. 在网络中传输

xml与html的区别

  1. xml标签都是自定义的,html是预定义的

  2. xml语法严格,html语法松散

  3. xml是存储数据的,html是展示数据

语法

基本语法

  1. 后缀名为.xml

  2. xml第一行为文档声明

  3. 有且仅有一个根标签

  4. 属性值必须使用引号引起来

  5. 必须有结束标签或者自闭和

  6. 标签名称区分大小写

快速入门

<?xml version='1.0'?>
<users>
    <user id='1'>
        <name>zhangsan</name>
    </user>
</users>

组成部分

  1. 文档声明

    1. 格式

      • <?xml 属性列表?>

      • 问号与尖括号不能有空格

    2. 属性列表

      1. version:版本:1.0是主流版本,必须要写这个属性,不写就报错

      2. encoding:编码方式:告知解析引擎当前文档使用的字符集,默认值 iso-8859-1,

      3. standalone: 是否独立

        1. yes:不依赖其他的文件 独立

        2. no:依赖其他文件 不独立

  2. 指令

  3. 标签:标签名称都是自定义的

    1. 规则:

      1. 不能数字开头

      2. 可以包含字母,数字以及其他的字符

      3. 不能包含空格

      4. 名称不能以xml开始

  4. 属性

    1. id属性值唯一

  5. 文本

    1. CDATA区 :数据会被原样展示

      <![CDATA[
          数据
      ]]>

约束

  1. 规定xml的书写规则的

  2. 分类

    1. DTD:一种简单的约束技术

      1. 内部

        1. 引入方式

          <!DOCTYPE 根标签名[
              这里写dtd约束
          ]>

      2. 外部

        1. 引入

          1. 本地:<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">

          2. 网络上的:<!DOCTYPE 根标签名 PUBLIC "dtd文件名" "dtd文件的位置">

        2. 约束文件内容示例

          <!ELEMENT students (student*)>//根标签名 *代表不限制数量
          <!ELEMENT student ( name,age, sex)>//包含的属性
          <!ELEMENT name (#PCDATA)>//#PCDATA 代表name属性值是一个字符串
          <!ELEMENT age (#PCDATA)>
          <!ELEMENT sex (#PCDATA)> 
          <!ATTLIST student number ID #REQUIRED>//表示student的属性number文本类型为ID,#REQUIRED代表必须这个属性是必须的,#IMPLIED则是代表这个属性是可选的
    2. SCHEMA:可以对属性的值进行限定

      1. 引入

        1. 填写xml文档的根元素

        2. 引人xsi前缀.xmlns:xsi="http: / /www.w3.org/2001/XNLSchema-instance"

        3. 引入xsd文件命名空间. xsi:schemaLocation="http: / /www.itcast.cn/xml student.xsd"

        4. 为每一个xsd约束声明一个前缀,作为标识xmlns="http://www.itcast.cn/xml"

解析

  1. 操作xml文档,将文档中的数据读取到内存中

    1. 解析:将文档中的数据读取到内存中

    2. 写入:将内存中的数据保存到xml中,持久化的存储

  2. 解析xml的方式

    1. DOM:叫标记语言文档一次性加载进内存,在内存中形成一颗DOM树

      1. 优点:操作方便,可以对文档进行CURD的所有操作

      2. 缺点:消耗内存

    2. SAX:逐行读取,基于事件驱动的

      1. 优点:不占内存

      2. 缺点:只能读取,不能增删改

    3. 我们一般在服务器端使用DOM的思想,在移动端使用SAX的思想

  3. xml常见的解析器

    1. JAXP:sun公司提供的解析器,支持dom和sax两种思想

    2. DOM4J:一款非常优秀的解析器

    3. Jsoup: jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jquery的操作方法来取出和操作数据。

    4. PULL: Android操作系统内置的解析器,sax方式的。

  4. Jsoup解析器的使用

    1. 快速入门

      1. 步骤

        1. 导入jar包

            <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
                  <dependency>
                      <groupId>org.jsoup</groupId>
                      <artifactId>jsoup</artifactId>
                      <version>1.14.3</version>
                  </dependency>
        2. 获取Document对象

        3. 获取对应的标签

        4. 获取数据

          package com.tt.jsoup;
          ​
          import org.jsoup.Jsoup;
          import org.jsoup.nodes.Document;
          import org.jsoup.nodes.Element;
          import org.jsoup.select.Elements;
          ​
          import java.io.File;
          import java.io.IOException;
          ​
          public class JsoupDemo1 {
              public static void main(String[] args) throws IOException {
                  //获得xml文件的路径
                  String path = JsoupDemo1.class.getClassLoader().getResource("aaa.xml").getPath();
                  //通过Jsoup这个解析器来解析xml文件,把xml文件加载进内存
                  Document parse = Jsoup.parse(new File(path), "utf-8");
          ​
                  //public class Elements extends ArrayList<Element> {}
                  //这里的Elements是一个集合,泛型的类型是我们传给他的元素对象
                  Elements elementsByTag = parse.getElementsByTag("name");
                  //打印第一个name的值
                  Element element = elementsByTag.get(0);
                  System.out.println(element.text());
              }
          }
          ​
      2. 对象的使用

        1. Jsoup:是一个工具类,可以解析html或者xml文档,返回document

        2. document:文档对象,代表内存中的dom树

          1. 获取Element对象

            1. getElementsByTag(String tagName):根据标签名称获取元素对象集合

            2. getElementsByAtrribute(String key):根据属性名称获取

            3. getElementsByAtrributeValue(String key,String value):根据对应的属性名和属性值获取集合

            4. getElementsById(String id):根据属性id获取

            package com.tt.jsoup;
            ​
            import org.jsoup.Jsoup;
            import org.jsoup.nodes.Document;
            import org.jsoup.nodes.Element;
            import org.jsoup.select.Elements;
            ​
            import java.io.File;
            import java.io.IOException;
            ​
            public class JsoupDemo3 {
                //<?xml version="1.0" encoding="utf-8"?>
                //<students>
                //    <student>
                //        <name id="666">张三</name>
                //        <age>13</age>
                //        <sex>male</sex>
                //    </student>
                //</students>
                public static void main(String[] args) throws IOException {
                    //获得xml文件的路径
                    String path = JsoupDemo3.class.getClassLoader().getResource("aaa.xml").getPath();
                    //通过Jsoup这个解析器来解析xml文件,把xml文件加载进内存
                    Document parse = Jsoup.parse(new File(path), "utf-8");
                    //getElementsByTag(String tagName):根据标签名称获取元素对象集合
                    Elements student = parse.getElementsByTag("student");
                    System.out.println(student);
                    System.out.println("==================================");
                    //getElementsByAtrribute(String key):根据属性名称获取
                    Elements name = parse.getElementsByAttribute("id");
                    System.out.println(name);
                    System.out.println("==================================");
            //        getElementsByAtrributeValue(String key,String value):根据对应的属性名和属性值获取集合
                    Elements name1 = parse.getElementsByAttributeValue("id","666");
                    System.out.println(name1);
                    System.out.println("==================================");
            //        getElementsById(String id):根据属性id获取
                    Element name3 = parse.getElementById("666");
                    System.out.println(name3);
                }
            }
            ​

        3. Elements:这里的Elements是一个集合,泛型的类型是我们传给他的元素对象

          1. 获取子元素对象

            1. getElementsByTag(String tagName):根据标签名称获取元素对象集合

            2. getElementsByAtrribute(String key):根据属性名称获取

            3. getElementsByAtrributeValue(String key,String value):根据对应的属性名和属性值获取集合

            4. getElementsById(String id):根据属性id获取

          2. 获取属性值

            1. String attr(String key):根据属性名称获取属性值

          3. 获取文本内容

            1. String text():获取文本内容

            2. String html():获取标签体的所有内容(包括子标签的)

            package com.tt.jsoup;
            ​
            import org.jsoup.Jsoup;
            import org.jsoup.nodes.Document;
            import org.jsoup.nodes.Element;
            import org.jsoup.select.Elements;
            ​
            import java.io.File;
            import java.io.IOException;
            ​
            public class JsoupDemo4 {
                public static void main(String[] args) throws IOException {
                    //获得xml文件的路径
                    String path = JsoupDemo4.class.getClassLoader().getResource("aaa.xml").getPath();
                    //通过Jsoup这个解析器来解析xml文件,把xml文件加载进内存
                    Document parse = Jsoup.parse(new File(path), "utf-8");
                    //先得到一个element对象
                    Elements sid = parse.getElementsByAttribute("sid");
                    System.out.println(sid);
                    //String attr(String key):根据属性名称获取属性值
                    String id = sid.attr("sid");
                    System.out.println(id);
                    System.out.println("==========================");
                    //1. String text():获取文本内容
                    //2. String html():获取标签体的所有内容(包括子标签的)
            ​
                    String text = sid.text();
                    System.out.println(text);
                }
            }
        4. Node:节点对象

        5. 快捷查询方式

          1. 选择器

            • Elements select(String cssQuery);

          2. xpath:XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

            1. 使用Jsoup的xpath需要导入一个新的jar包

            <!-- https://mvnrepository.com/artifact/cn.wanghaomiao/JsoupXpath -->
            <dependency>
                <groupId>cn.wanghaomiao</groupId>
                <artifactId>JsoupXpath</artifactId>
                <version>2.5.1</version>
            </dependency>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值