• 概念

    • Extensible Markup Language 可扩展标记语言
      • 可扩展:标签都是自定义的
    • 功能:
      • 存储数据
        • 配置文件
        • 在网络中传输
    • xml与Html的区别:

      • xml标签是自定义的,html标签是预定义的
      • xml的语法严格,html语法松散
      • xml是存储数据的,html是展示数据的

        语法

        基本语法

    • xml文档的后缀名 .xml

    • xml第一行必须定义为文档声明
    • xml文档中有且仅有一个根标签
    • 属性值必须使用引号
    • 标签必须正确关闭(包括自闭合)
    • xml标签区分大小写

      组成部分

    • 文档声明

      • 格式: `<?xml 属性列表 ?>
      • 属性列表:
        • version :版本号,必要属性
        • encoding :编码方式,告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1
        • standalone :是否独立
          • 取值:
            • yes:不依赖其他文件
            • no:依赖其他文件
    • 指令(了解):结合css
      • <?xml-stylesheet type="text/css" href="a.css" ?>
    • 标签 :标签名称自定义
      • 规则:
        • 不能以数字、标点符号开头
        • 名称不能以字母xml开头
        • 名称不包含空格
    • 属性
      • id属性值唯一
    • 文本

      • CDATA区:在该区域中的数据会被原样展示
        • <![CDATA[ 数据 ]]>

          约束

          规定xml文档的书写规则
    • 作为框架的使用者(程序员)

      • 能够在xml中引入约束文档
      • 能够简单的读懂约束文档
    • 分类:
      • DTD:一种简单的约束技术
      • Schema:一种复杂的
    • DTD:
      • 引入dtd文档到xml文档中
        • 内部dtd (了解): 将约束规则定义在xml文档中
        • 外部dtd : 将约束规则定义在外部的dtd文件中
          • 本地 <!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
          • 网络 <!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置(URL)">
    • Schema约束:
      • 引入:
        • 填写xml文档的根元素
        • 引入xsi前缀, xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
        • 引入xsd文件命名空间, xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
        • 为每一个xsd约束声明一个前缀,作为标识 xmlns:a="http://www.itcast.cn/xml"

//a就是前缀(自定义)

解析

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

操作xml文档

  • 解析(读取):将文档的数据读取到内存中
  • 写入:将内存中的数据保存到xml文档中。持久化存储

    解析xml的方式

  • DOM:将标记语言文档一次性加载进内存,形成DOM树 (服务器端)

    • 优点:操作方便,可以对文档进行CRUD的所有操作
    • 缺点:占内存
  • SAX:逐行读取,基于事件驱动 (移动端)

    • 优点:不占内存
    • 缺点:只能读取,不能增删改

      XML常用解析器

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

  • DOM4J:一款非常优秀的解析器
  • Jsoup:一款标记语言解析器
  • PULL:Android操作系统内置解析器,sax方式

    Jsoup

  • 快速入门

    • 步骤:
      • 导入jar包
      • 获取Document对象
      • 获取对应的标签(ELement对象
      • 获取数据(文本内容…
        1. /**
        2. * 快速入门
        3. */
        4. public class JsoupDemo01 {
        5. public static void main(String[] args) throws IOException {
        6. //获取Document对象 - 根据xml文档获取
        7. //获取xml的path路径
        8. String path = JsoupDemo01.class.getClassLoader().getResource("student.xml").getPath();
        9. //解析xml文档(加载文档进内存,获取dom树-->Document对象
        10. Document document = Jsoup.parse(new File(path), "utf-8");
        11. //获取元素对象 Element对象
        12. Elements elements = document.getElementsByTag("name");
        13. //返回了集合,继承ArrayList<Elements>
        14. System.out.println(elements.size());
        15. //获取第一个name的element对象
        16. Element element = elements.get(0);
        17. //System.out.println(element);
        18. //获取数据
        19. String name = element.text();
        20. System.out.println(name);
        21. }
        22. }
  • Jsoup对象

    • Jsoup:工具类,可以解析html或xml文档,返回Document
      • parse :解析html或xml文档,返回Document
        • parse(File in,String charsetName) 解析xml或html文件
        • parse(String html) 解析xml或html字符串
        • parse(URL url, int timeoutMillis) :通过url网址解析网站标签内容
    • Document:文档对象,代表内存中的DOM树
      • 获取Element对象
        • getElementById(String id) :通过id获取单个element对象
        • getElementsByTag(String tagName) :根据标签名称获取元素对象集合
        • getElementsByAttribute(String key) :根据属性名称获取元素对象集合
        • getElementsByAttributeValue(String key, String value) :根据对应的属性名和属性值获取元素对象集合
    • ELements:元素Element对象的集合,可以当作 ArrayList使用
    • Element:元素对象
      • 获取子元素对象
        • 包含Document的方法
      • 获取属性值的方法
        • String attr(String key) :根据属性名称获取属性值
      • 获取文本内容
        • String text() :获取文本内容
        • String html() :获取标签体的所有内容(包括子标签的字符串内容
    • Node:节点对象

      • 是Document和Element的父类

        快捷查询方式

        selector :选择器

      • 使用的方法 ELements select(String cssQuery)

        • 语法:参考Selector类中定义的语法 (类似css的写法 例 div a div>tr ```java //查询id值为lit的元素 Elements elements1 = document.select(“#lit”); System.out.println(elements1); System.out.println(“———————————————“);

        //需求:获取student标签标签其number属性为heima_0001的age子标签 Elements elements2 = document.select(“student[number=’heima_0001’]”); System.out.println(elements2); System.out.println(“———————————————“);

        //获取number属性值为heima_0001的age标签 Elements elements3 = document.select(“student[number=’heima_0001’] > age”); System.out.println(elements3); ```

XPath

  1. - 需要额外导入jar
  2. - 查询w3cshool参考手册,使用xpath的语法完成查询