XML是Extensible Markup Language 可扩展标记语言,它是可扩展合。标签都是自定义的,例如 功能 用来存储数据 运用场景 配置文件、在网络中传输

xml与html的区别

XML HTML
标签 自定义 预定义
语法 严格 松散
数据 存储数据 展示数据
语言性质 可扩展标记语言 超文本标记语言

XML 基本语法

  • xml文档的后缀名 .xml
  • xml第一行必须定义为文档声明
  • xml文档中有且仅有一个根标签
  • 属性值必须使用引号(单双都可)引起来
  • 标签必须正确关闭
  • xml标签名称区分大小写 ```xml <?xml version=”1.0” encoding=”utf-8” standalone=”yes”?>

一缕清风 18 man 三好学生

  1. <a name="vh27H"></a>
  2. ## XML 组成部分
  3. <a name="gRepc"></a>
  4. ### 文档声明
  5. ```xml
  6. 格式:<?xml 属性列表 ?>
  • version 版本号,必须的属性
  • encoding 编码方式。告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1
  • standalone 是否独立
    • yes: 不依赖其他文件
    • no: 依赖其他文件

指令(了解)

结合css的外联css层叠样式使用

<?xml-stylesheet type="text/css" href="a.css" ?>

标签规则

  • 名称可以包含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
    • 名称不能以字母 xml(或者 XML、Xml 等等)开始
  • 名称不能包含空格

属性

id属性值唯一

文本

CDATA区:在该区域中的数据会被原样展示,格式

<![CDATA[ 数据 ]]>

约束

DTD: 一种简单的约束技术

  • 内部dtd:将约束规则定义在xml文档中
  • 外部dtd: 将约束的规则定义在外部的dtd文件中
    • 本地:<!DOCTYPE 根标签名 SYSTEM “dtd文件的位置”>
    • 网络:<!DOCTYPE 根标签名 PUBLIC “dtd文件名字” “dtd文件的位置URL”>

student.dtd

<!ELEMENT students (student*) >
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>

student.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE students SYSTEM "student.dtd">
<students>
  <student number="itcast_0001">
    <name>tom</name>
    <age>18</age>
    <sex>male</sex>
  </student>
</students>

Schema:一种复杂的约束技术

<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"
>
  • 填写xml文档的根元素
  • 引入xsi前缀 .xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance
  • 为每一个xsd约束声明一个前缀,作为标识 xmlns=”http://www.itcast.cn/xml
  • 引入xsd文件命名空间 .xsi:schemaLocation=”http://www.itcast.cn/xml student.xsd”
    <?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>
    
    ```xml <?xml version=”1.0” encoding=”UTF-8” ?>

tom 18 male

```

解析XML

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

解析xml的方式

DOM 将标记语言文档一次性加载进内存,在内存中形成一颗dom树
优点:操作方便,可以对文档进行CRUD的所有操作
缺点:占内存
SAX 逐行读取,基于事件驱动的
优点:不占内存
缺点:只能读取,不能增删改

xml常见的解析器

JAXP sun公司提供的解析器,支持dom和sax两种思想
DOM4J 一款非常优秀的解析器
PULL Android操作系统内置的解析器,sax方式的
Jsoup jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据

Jsoup

Jsoup工具类,可以解析html或xml文档,返回Document

快速入门
1. 导入jar包
2. 获取Document对象
3. 获取对应的标签Element对象
4. 获取数据

对象的使用

解析html或xml文档,返回Document
parse(File in, String charsetName) 解析xml或html文件的
parse(String html) 解析xml或html字符串
parse(URL url, int timeoutMillis) 通过网络路径获取指定的html或xml的文档对象
文档对象。代表内存中的dom树
getElementById(String id) 根据id属性值获取唯一的element对象
getElementsByTag(String tagName) 根据标签名称获取元素对象集合
getElementsByAttribute(String key) 根据属性名称获取元素对象集合
getElementsByAttributeValue(String key, String value) 根据对应的属性名和属性值获取元素对象集合
元素Element对象的集合。可以当做 ArrayList来使用,是可以可以遍历的
public int size() 获取的返回元元素长度
public String text() 返回各个部分的文本
Element:元素对象
getElementById(String id) 根据id属性值获取唯一的element对象
getElementsByTag(String tagName) 根据标签名称获取元素对象集合
getElementsByAttribute(String key) 根据属性名称获取元素对象集合
getElementsByAttributeValue(String key, String value) 根据对应的属性名和属性值获取元素对象集合
String attr(String key) 根据属性名称获取属性值
获取文本内容
String text() 获取文本内容
String html() 获取标签体的所有内容(包括字标签的字符串内容)

Node 节点对象是Document和Element的父类
快捷查询方式
- selector:选择器
- XPath
- [x] XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言
- [x] 使用Jsoup的Xpath需要额外导入jar包
- [x] 查询w3cshool参考手册,使用xpath的语法完成查询

Jsoup.png