12 XML 语法 解析

1 篇文章 0 订阅

目录

语法

组成部分

文档声明

约束

DTD

Schema

解析

解析方式

DOM

SAX

常见的解析器

DOM4J

Jsoup

快捷查询方式

selector:选择器

Xpath


  1. 语法

    1. 第一行必须写文档声明,第一行空着都不行,语法要求很严格
    2. 组成部分

      1. 文档声明

        1. 格式<?xml 属性列表 ?>
          1. 尖括号和问号之间不能有空格
        2. 属性列表
          1. version:必须的属性
          2. encoding:用来指明xml文档的编码的
      2. 指令
        1. 也可以给xml文档设置属性(使用CSS即可)
      3. 标签
      4. 属性
      5. 文本
    3. 约束

      1. 程序员与框架交流的媒介
      2. 只需要会用就行了
      3. 约束分类
        1. DTD

        2. Schema

          1. 可以规定标签体里面的内容
          2. 引入
            1. 特别复杂,没看懂,记住就行了
            2. 引入代码
              <?xml version="1.0" encoding="UTF-8" ?>
              <!-- 
              	1.填写xml文档的根元素
              	2.引入xsi前缀.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              	3.引入xsd文件命名空间.  xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"
              	4.为每一个xsd约束声明一个前缀,作为标识  xmlns="http://www.itcast.cn/xml" 
               -->
              <students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xmlns="http://www.itcast.cn/xml"
                        xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"
              >
                  <student number="heima_0002">
                      <name>tom</name>
                      <age>256</age>
                      <sex>female</sex>
                  </student>
              </students>
            3. 约束代码
              <?xml version="1.0"?>
              <xsd:schema xmlns="http://www.itcast.cn/xml"
                          xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                          targetNamespace="http://www.itcast.cn/xml" elementFormDefault="qualified">
                  <xsd:element name="students" type="studentsType"/>
                  <xsd:complexType name="studentsType">
                      <xsd:sequence>
                          <xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/>
                      </xsd:sequence>
                  </xsd:complexType>
                  <xsd:complexType name="studentType">
                      <xsd:sequence>
                          <xsd:element name="name" type="xsd:string"/>
                          <xsd:element name="age" type="ageType"/>
                          <xsd:element name="sex" type="sexType"/>
                      </xsd:sequence>
                      <xsd:attribute name="number" type="numberType" use="required"/>
                  </xsd:complexType>
                  <xsd:simpleType name="sexType">
                      <xsd:restriction base="xsd:string">
                          <xsd:enumeration value="male"/>
                          <xsd:enumeration value="female"/>
                      </xsd:restriction>
                  </xsd:simpleType>
                  <xsd:simpleType name="ageType">
                      <xsd:restriction base="xsd:integer">
                          <xsd:minInclusive value="0"/>
                          <xsd:maxInclusive value="256"/>
                      </xsd:restriction>
                  </xsd:simpleType>
                  <xsd:simpleType name="numberType">
                      <xsd:restriction base="xsd:string">
                          <xsd:pattern value="heima_\d{4}"/>
                      </xsd:restriction>
                  </xsd:simpleType>
              </xsd:schema> 
              
  2. 解析

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

      1. 面试可能会问
      2. DOM

        1. 一次性将所有数据全部读取到内存中去
        2. 形成dom树
        3. 多用于服务器端开发
      3. SAX

        1. 一次读取一行基于事件驱动
        2. 原理
          1. 一次读取一行,读一行释放一行。当读取到不同的标签时,也会触发不同的事件(读取到head时执行某某,读取到p时执行某某),这就是基于事件驱动
        3. 多用于移动端开发,比如手机之类的性能不太强的设备
        4. 只能读,不能改
    3. 常见的解析器

      1. 解析器都是根据上面的两种思想(DOM、SAX)来制作的
      2. JAXP

        1. 官方的,不好用,没人用 
      3. DOM4J

        1. 好用,但是今天不学
      4. Jsoup

        1. 本来是用来解析HTML的,但是也可以拿来解析xml文档,效果也不错
        2. 步骤
          1. 导入 jar 包
          2. 获取 Document 对象
          3. 获取对应的标签 Element 对象
          4. 获取数据
            1. //获取文件路径
              URL url = Main01.class.getClassLoader().getResource("student.xml");
              String path = url.getPath();
              //获取dom对象,代表dom树形结构
              Document document = Jsoup.parse(new File(path), "utf-8");
              //获取元素
              //返回值是一个ArrayList数组
              Elements name = document.getElementsByTag("name");
              System.out.println(name.size());
              for (Element element : name) {
                  System.out.println(element.text());//打印元素的值
              }

               

        3. 对象的使用
          1. Jsoup
            1. parse (URL url, inttimeoutMillis) :通过网络路径获取指定的 html 或 xml 的文档对象
              1. 可以用于制作小型的网络爬虫
          2. Document
            1. 主要用来获取Element对象的
          3. Element
            1. 也可以使用方法来获取他的子标签
            2. 方法
              1. String text(): 获取文本内容
                1. 也会把子标签的文本内容全部获取出来
              2. String html(): 获取标签体的所有内容 ( 包括字标签的字符串内容 )
          4. Node:结点对象
      5. PULL
        1. 安卓内置解析器,解析SAX的
    4. 快捷查询方式

      1. selector:选择器

        1. 使用标签选择器来快速查找到想要的数据
        2. 类似于css代码中的选择器
      2. Xpath

        1. 依旧会用到Jsoup解析器
        2. 使用之前需要导入jar包
        3. //获取文件路径
          String path = Main01.class.getClassLoader().getResource("student.xml").getPath();
          //获取document对象
          Document document = Jsoup.parse(new File(path), "utf-8");
          //获取jxDocument对象
          JXDocument jxDocument = new JXDocument(document);
          //使用语句查询
          List<JXNode> jxNodes = jxDocument.selN("//student[@number='s01']/sex");
          for (JXNode jxNode : jxNodes) {
              System.out.println(jxNode);
          }

           

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值