XML入门

XML概述
XML是什么语言?有什么特点?

  • Entensible Markup Language 可拓展标记语言
  • XML也是由标签构成的,标签的内容都是自定义的.
    XML的主要作用是什么?
  • 作为配置文件(Spring/SpringMvc/MyBatis/Hibernate)
  • 在网络中进行数据的传输与交互(基本没什么人用了 -> json) 一些老的项目,WebService还是使用XML进行交互.
    XML与HTML的区别是什么?
  • XML的标签都是自定义的,HTML标签都是预定义的.
  • XML的语法非常的严格,必须按照XML的要求进行书写,HTML的语法相对于XML来说比较松散.
  • XML的主要作用就是作为配置文件/进行数据交互使用的,HTML的主要是展示数据用的.
    XML入门
    XML的基本语法是什么?
  • XML文件必须是.xml.XML文件中的第一行必须为文档声明,不是说文档声明必须在第一行,而是第一行必须是文档声明[必须行号为1的那一行书写文档声明])
  • XML中必须有且仅有一个根标签.
  • XML中的标签可以有属性值 -> 属性名=属性值 属性值必须用单引号/双引号进行包裹.
  • XML中标签也有围堵标签/自闭和标签,但是如果使用围堵标签,围堵标签必须正确关闭.
  • XML标签的名称区分大小写(HTML中不区分大小写的,但是推荐小写).
    XML组成部分
  • 文档声明
  • 指令声明
  • 标签声明
  • 属性声明
  • 文本声明
    XML中的文档声明部分格式是什么?属性列表是什么?
<?xml 属性列表 ?>

version:版本号 -> 1.0(有1.1版本但是不向下兼容,所以1.0仍是主流)
encoding:编码方式 -> UTF-8
standalone:是否独立 (是否依赖其他的文件) [可写可不写]

<?xml version='1.0' encoding='UTF-8' ?>

XML中的标签部分的使用规则是什么?

  • 标签名称可以包含字母/数字/其他的字符(一般来说字母就足够了)
  • 标签名称不可以由数字/标点符号开始.
  • 标签名称不可以由XML三个字母的任何形式开始. xml XML Xml.
  • 名称不可以包含空格
  • 见名知意
    XML中属性部分由什么构成?规则是什么?
  • 键值对 属性名=属性值
  • 属性值要用单引号/双引号进行包裹.
  • 全局唯一.
    XML中的文本部分如果中间包含实体字符(转义字符)应该如何处理?格式是什么?
  • 可以将空格转换为 
  • 2.使用CDATA区 -> CDATA中的数据会原样进行展示.
    XML约束概述
    什么是XML约束?
    规定XML的书写规定的。
  • 规定 -> 是由框架提供规定,我们通过规定写出配置文件,框架读取配置文件,完成配置.
  • 1.简单读懂即可. 2.可以将约束导入到XML中即可(脚手架文件)
    XML约束文档分为哪几类?
  • DTD约束
  • Schema约束
    XML约束DTD
  • DTD约束中的各个组成部分是什么意思?
<!-- 定义了一个students标签,这个标签中只可以有student标签,student标签出现的次数为0-n次(可以不出现) 如果说想要student标签出现最少1次,*要改成+ -->
<!ELEMENT students (student*)>
<!-- 定义一个student标签,这个标签只可以有name,age,gender标签并且这三个要按照顺序出现 -->
<!ELEMENT student (name,age,gender)>
<!-- 定义了一个name标签,name标签中可以放什么数据? #PCDATA表示字符串 -->
<!ELEMENT name (#PCDATA)>
<!-- 定义了一个age标签,age标签中可以放什么数据? #PCDATA表示字符串 -->
<!ELEMENT age (#PCDATA)>
<!-- 定义了一个gender标签,gender标签中可以放什么数据? #PCDATA表示字符串 -->
<!ELEMENT gender (#PCDATA)>
<!-- 定义元素中的属性,给student元素定义了属性,key=value,key叫做number,key是ID类型(全局唯一)  #REQUIRED必须有. -->
<!ATTLIST student number ID #REQUIRED>

如何引入DTD文档?
内部引用
格式:

<!DOCTYPE 根标签名称[
    <!ELEMENT students (student*)>
    <!ELEMENT student (name,age,gender)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT gender (#PCDATA)>
    <!ATTLIST student number ID #REQUIRED>
]>

外部引入
本地外部引入(推荐DTD约束和XML文件在一起)

<!DOCTYPE 根标签名称 SYSTEM "引入的DTD文件名称">

网络外部引入

<!DOCTYPE 根标签名称 PULBIC "引入的DTD文件名称(随便写)" "DTD的网络URL地址">

XML约束Schema
Schema约束本身就是XML文件
Schema的组成部分

<!-- 定义标签 -->
<xsd:element name="students" type="studentsType"/>
<!-- 定义复杂类型(复合类型) -->
<xsd:complexType name="studentsType">
<!-- 定义元素组成,要求组中的元素以指定的顺序出现在包含元素中。每个子元素可出现0次到任意次数。-->
<xsd:sequence>

<!-- 定义简单类型 -->
<xsd:simpleType name="sexType">

<!-- 定义XML元素的使用限制 -->
<xsd:pattern value="heihei_\d{4}"/>

引入方式
填写xml文档的根元素
引入xsi前缀

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

引入xsd文件命名空间

xsi:schemaLocation="命名空间名称  引入的约束文件名称(可以是本地也可以是网络的)"

为每一个xsd约束声明一个前缀,作为标识.

xmlns="http://www.baidu.com/xml"

当引入多个约束文件的时候,要给约束文件起名 -> 方便使用约束.
默认不写(在只引入一个约束文件前提下,可以不写)

xmlns:前缀名称="命名空间名称"

XML解析方式
XML文档的操作方式都有那几种?

  • 读取(文档中的元素的值)
  • 写入(使用的比较少)
    XML文档解析的方式有哪几种?有什么优缺点?
    DOM解析思想
  • 将XML文档一次性加载到内存中,形成一颗COM树
  • 好处:使用DOM思想来操作XML可以进行CRUD的操作.
  • 坏处:坏处:占用内存(服务器内存都比较大) 后端:都是使用DOM解析思想.
    SAX解析思想
  • 逐行读取,基于事件的区别(有一个XML文档,我想读取title标题,从第一行开始读取,当读取到title的开始标签的时候,触发事件,读取到title的下一行作为数据返回.)
  • 好处:不占用内存
  • 坏处:只能读取,不能够写入/更新/删除. 手机/内存较小的设备.
    XML解析常见的解析器
    常用的XML解析器有哪几种?分别有什么好处?
  • JAXP:SUN公司提供的标记语言解析器 -> 同时支持DOM和SAX但是性能一般.
  • DOM4J:DOM解析思想的解析器.
  • Jsoup:本身是一个HTML的解析器 -> HTML和XML都是标记语言,使用比较方便. (用于爬虫)
  • PULL:Andriod内置的解析器 -> 采用SAX解析思想去进行解析.

XML解析Jsoup快速入门
Jsoup解析XML的步骤是什么?

package com.itheima.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;
import java.net.URL;

public class QuickJsoup {
    public static void main(String[] args) throws IOException {
        /*
        1.将XML加载到内存中 -> Jsoup.parse()方法可以将XML文档加载到内存中并且返回一个Document对象(Dom树)
        parse方法需要一个File参数 -> File封装的就是XML文档.
         */
        String xmlPath = QuickJsoup.class.getClassLoader().getResource("Test.xml").getPath();
        File xmlFile = new File("Aa_XML\\Test.xml");
        /*File xmlFile = new File(xmlPath.trim());*/
        Document document = Jsoup.parse(xmlFile, "UTF-8");
        /*2.通过Dom树查找对应的元素(Element)
        Element = <name>张三</name> Element = <name>Sloog</name> Element + Element = Elements(继承自ArrayList<Element>的一个集合)
        */
        final Elements elements = document.getElementsByTag("name");
        //3.遍历集合 -> 获取每一个组成元素 Element
        for (Element element : elements) {
            /*
            element中封装的是:
            <name>
             张三
            </name>
             */
            System.out.println(element.text());
        }
    }
}

XML解析Jsoup-Jsoup对象
Jsoup对象是什么?

  • org.jsoup包中的工具类 -> 作用:将XML/HTML文档加载到内存中形成Dom树(返回一个Document对象.)
    Jsoup对象常用加载的方式(重载形式)有哪几种?
  • parse(File file,String characterName) -> 通过File对象将File对象所表示的XML文档加载到内存中通过characterName方式进行解码.
  • parse(String html) -> 通过String字符串形式加载XML文档/HTML文件进入到内存.
  • arse(URL u,int timeoutmillis) -> URL统一资源定位符,表示互联中的一个资源 实际上就是一个网址
    XML解析Jsoup-Document对象
    Document对象是什么?
  • 文档对象,代表内存中的DOM树.
    Document对象根据标签名称获取集合的方式是什么?
  • document.getElementsByTag(“标签名称”);
    Document对象根据属性名称获取集合的方式什么?
  • document.getElementsByAttribute(“属性名称”);
    Document对象根据属性名称和对应的属性值获取集合的方式什么?
  • document.getElementsByAttributeValue(“属性名”,“属性值”);
    如何通过根据ID值获取唯一的Element对象?
  • document.getElementById(“ID值”); //ID全局唯一
    XML解析Jsoup-Element对象
    Element对象是什么?
  • 元素对象
    如何根据属性名获取属性值?
  • 可以通过attr(“属性名”)返回对应的属性值.
    如何获取文本内容?
  • text();
    html()方法和text()方法有什么区别?
  • test()方法只会获取子标签中的纯文本内容,html()方法将会获得标签体中的所有内容.
    XML解析Jsoup-Selector选择器查询
    Selector选择器使用的方法是哪个?
  • select(String cssQuery)
    select方法的参数
  • CSSQuery就是Css中的选择器相关的语法.
    XML解析Jsoup-Xpath(wanghaomiao)查询
    要用Xpath进行查询,需要先做什么事情?
  • 导入jar包
  • 之前是通过document对象进行查询的 -> 如果想要使用XML路经查询语言(xPath)进行查询的话. 需要将document转换为xPath支持的对象.
  • JXDocument jxDocument = new JXDocument(document);
    使用Xpath进行查询,需要使用哪个方法?
  • selN(String xPath)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值