XML&Jsoup解析器【最详细教程】

  • DTD:

  • 引入dtd文档到xml文档中

  • 内部dtd:将约束规则定义在xml文档中

  • 外部dtd:将约束的规则定义在外部的dtd文件中

  • 本地:

  • 网络:

  • 写框架的人写的dtd约束文档:

<!ELEMENT students (student*) > <!ELEMENT student (name,age,sex)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ATTLIST student number ID #REQUIRED>
  • 程序员使用dtd的约束文档
<?xml version="1.0" encoding="UTF-8" ?>

tom

18

male

  • dtd约束文档的缺点
  1. 不能限定内容

  2. 语法结构:

DTD的语法与XMl不同,使用DOM,XPath,XSL无法处理,为自动化文档处理带来不便

  1. 数据类型

DTD数据类型不能自由扩充,不利于XML数据交换场合验证

3.文档结构

DTD中,所有元素、属性都是全局的, 无法声明仅与上下文位置相关的元素或属性

  1. 名称空间

DTD中没有名称空间的概念,不直接支持名称空间

2、Schema约束文档【主流】

  • Schema:

  • 引入:

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.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" ?>

<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”

tom

18

male

  • Springmvc的xml详解
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

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

xmlns:context=“http://www.springframework.org/schema/context”

xmlns:mvc=“http://www.springframework.org/schema/mvc”

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd">

<context:annotation-config />

<context:component-scan base-package=“cn.cisol.mvcdemo”>

<context:include-filter type=“annotation”

expression=“org.springframework.stereotype.Controller” />

</context:component-scan>

<mvc:annotation-driven />

<mvc:resources mapping=“/resources/**” location=“/resources/” />

<bean

class=“org.springframework.web.servlet.view.ContentNegotiatingViewResolver”>

<bean

class=“org.springframework.web.servlet.view.json.MappingJackson2JsonView”>

<bean

class=“org.springframework.web.servlet.view.InternalResourceViewResolver”>

<property name=“viewClass”

value=“org.springframework.web.servlet.view.JstlView” />

<bean id=“multipartResolver”

class=“org.springframework.web.multipart.commons.CommonsMultipartResolver”>

五、XML的解析

===========================================================================

1、解析xml文档

3.解析:操作xml文档,将文档中的数据读取到内存中

  • 操作xml文档
  1. 解析(读取):将文档中的数据读取到内存中

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

2、xml常见的解析器【面试题】

  • 解析xml的方式:
  1. DOM:将标记语言文档一次性加载进内存 ,在内存中形成一颗dom树
  • 优点:操作方便,可以对文档进行CRUD的所有操作

  • 缺点:占内存,消耗内存

用途:内存比较大的设备

  1. SAX:逐行读取,基于事件驱动的。
  • 优点:不占内存。

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

用途:手机,音响 ,逐行读取,事件驱动的

  • dom解析方式【重点,服务器端开发】

  • SAX逐行解析 ,事件驱动的

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

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

  3. Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。

它提供了一套非常省力的API,

可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

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

3、Jsoup解析器

  • jsoup.jar包

jsoup-1.11.2.jar

  • Jsoup:jsoup 是一款Java 的HTML解析器,

可直接解析某个URL地址、HTML文本内容。

它提供了一套非常省力的API,可通过DOM,

CSS以及类似于jQuery的操作方法来取出和操作数据。

  • 快速入门:

  • 步骤:

  1. 导入jar包

  2. 获取Document对象

  3. 获取对应的标签Element对象

  4. 获取数据

  • 案例代码:

//2.1获取student.xml的path

String path = JsoupDemo1.class.getClassLoader().getResource(“student.xml”).getPath();

//2.2解析xml文档,加载文档进内存,获取dom树—>Document

Document document = Jsoup.parse(new File(path), “utf-8”);

//3.获取元素对象 Element

Elements elements = document.getElementsByTag(“name”);

System.out.println(elements.size());

//3.1获取第一个name的Element对象

Element element = elements.get(0);

//3.2获取数据

String name = element.text();

System.out.println(name);

  • Jsoup所解析的代码
<?xml version="1.0" encoding="UTF-8" ?>

<students xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xmlns=“http://www.itcast.cn/xml”

xsi:schemaLocation=“http://www.itcast.cn/xml …/web/student.xsd”

tom

18

male

whj

21

male

4、Jsoup对象的使用

  • soup,Document,Elements,Element,Node对象的使用:
1. Jsoup:
  1. 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):通过网络路径获取指定的html或xml的文档对象

  1. parse​(File in, String charsetName):解析xml或html文件的

  1. parse​(String html):解析xml或html字符串

  1. parse​(URL url, int timeoutMillis):通过网络路径获取指定的html或xml的文档对象

url:统一资源定位符

timeoutMillis:超时时间 10000=10秒

URL url = new URL(“https://www.baidu.com”);//代表网络中的一个资源

Document parse = Jsoup.parse(url, 10000);

System.out.println(parse);

2. Document:
  1. Document:文档对象。代表内存中的dom树
  • 获取Element对象

  • getElementById​(String id):根据id属性值获取唯一的element对象

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

  • getElementsByAttribute​(String key):根据属性名称获取元素对象集合

  • getElementsByAttributeValue​(String key, String value):

根据对应的属性名和属性值获取元素对象集合

  • 代码案例

public static void main(String[] args) throws IOException {

// //2.获取Document对象,根据xml文档来获取

// //2.1获取xml的path路径

String path = JsoupDemo1.class.getClassLoader().getResource(“student.xml”).getPath();

Document document = Jsoup.parse(new File(path), “utf-8”);

//获取所有student

Elements elements = document.getElementsByTag(“student”);

System.out.println(elements);

}

打印结果:

打印了student对象

tom

18

male

whj

21

male

//获取属性为id的元素对象们

public static void main(String[] args) throws IOException {

// //2.获取Document对象,根据xml文档来获取

// //2.1获取xml的path路径

String path = JsoupDemo1.class.getClassLoader().getResource(“student.xml”).getPath();

Document document = Jsoup.parse(new File(path), “utf-8”);

// 获取属性id的对象们

Elements id = document.getElementsByAttribute(“id”);

System.out.println(id);

}

结果:

tom

public static void main(String[] args) throws IOException {

// //2.获取Document对象,根据xml文档来获取

// //2.1获取xml的path路径

String path = JsoupDemo1.class.getClassLoader().getResource(“student.xml”).getPath();

Document document = Jsoup.parse(new File(path), “utf-8”);

// 获取number属性值为heima_0001的元素对象

Elements value = document.getElementsByAttributeValue(“number”, “heima_0001”);

System.out.println(value);

}

结果:

tom

18

male

3. Elements:
  1. Elements:元素Element对象的集合。

可以当做 ArrayList来使用

4. Element:
  1. Element:元素对象

  2. 获取子元素对象

  • getElementById​(String id):根据id属性值获取唯一的element对象

  • getElementsByTag​(String tagName):根据标签名称获取元素对象集合
    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

分享一些资料给大家,我觉得这些都是很有用的东西,大家也可以跟着来学习,查漏补缺。

《Java高级面试》

《Java高级架构知识》

《算法知识》

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
里一直到现在。**

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-7OlLb2Mq-1713379568646)]

[外链图片转存中…(img-NXbM8mlr-1713379568646)]

[外链图片转存中…(img-Zv2NWOtc-1713379568647)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

分享一些资料给大家,我觉得这些都是很有用的东西,大家也可以跟着来学习,查漏补缺。

《Java高级面试》

[外链图片转存中…(img-WV6JrG5N-1713379568647)]

《Java高级架构知识》

[外链图片转存中…(img-x2ePWIbE-1713379568647)]

《算法知识》

[外链图片转存中…(img-A1x2GPMs-1713379568648)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值