【JavaWeb】XML和Jsoup的相关内容
文章目录
- 1 概念
- 2 语法
- 2.1 基本语法
- 2.2 组成部分
- 2.3 约束
- 2.3.1 使用DTD约束
- 2.3.2 使用Schema约束
- 3 解析
- 3.1 将文档中的数据读到内存
- 3.2 XML常见的解析器
- 4 Jsoup
- 4.1 使用Jsoup
- 4.2 对象的使用
- 4.2.1 Jsoup对象
- 4.2.2 Document对象
- 4.2.3 Element对象
- 4.3 快捷查询方式
- 4.3.1 selector选择器
- 4.3.2 XPath
1 概念
Extensible Markup Language 可扩展标记语言
可扩展:标签都是自定义的
功能:存储数据
- 配置文件
- 在网络中传输
xml和html的区别
- xml的标签都是自定义的 html的标签都是预定义的
- xml语法严格 html语法松散
- xml是存储数据的 html是展示数据的
2 语法
2.1 基本语法
- 后缀名是.xml
- 第一行必须定义为文档声明
<?xml version="1.0" encoding="utf-8" ?>
- xml中有且仅有1个根标签
- 属性值必须使用引号引起来
- 标签必须有结束
- xml标签区分大小写
2.2 组成部分
- 文档声明:
<?xml 属性列表 ?>
属性列表:version版本号、encoding编码方式(默认ISO-8859-1)、standalone是否独立('yes’不依赖其他文件/'no’依赖其他文件) - 指令:结合css控制样式(了解)
<?xml-stylesheet type="text/css" href="#.css" ?>
- 标签:名称自定义。数字、标点不能开头,名称不能以xml开头,名称不能包含空格。
- 属性:id属性唯一
- 文本:CDATA区,在这个区域的内容会原样展示
< ! [ CDATA [ 展示数据 ] ] >
2.3 约束
约束:规定xml文档的书写规则
目标:在xml中引入约束文档,读懂约束文档
分类
- DTD:一种简单的约束技术
- Schema:一种复杂的约束技术
2.3.1 使用DTD约束
将dtd文档引入xml文档
-<!DOCTYPE 根标签名 SYSTEM "dtd文件位置">
<!ELEMENT students (student*) >
<!--根标签是students *表示子标签student可以出现多次-->
<!ELEMENT student (name,age,sex)>
<!--student有三个子标签可以出现1次-->
<!ELEMENT name (#PCDATA)>
<!--子标签的数据类型是PCDATA-->
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
<!--student必须有id-->
<?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>
2.3.2 使用Schema约束
可以约束标签的属性值
引入约束:首先填写根标签,然后引入xsi前缀,引入xsd文件命名空间,给每个xsd约束声明一个前缀作为标识
3 解析
3.1 将文档中的数据读到内存
操作xml文档将文档中的数据读取到内存中
解析XML的方式:服务端一般用DOM 移动端一般用SAX
- DOM : 将标记语言文档一次性加载进内存,在内存中形成一棵DOM树。
优点:操作方便,可以对文档进行CRUD的所有操作
缺点:消耗内存 - SAX:逐行读取,基于事件驱动的。读一行释放一次。
优点:不占内存
缺点:只能读取,不能增删改
3.2 XML常见的解析器
- JAXP:SUN公司提供的解析器,支持DOM和SAX两种思想
- DOM4J
- Jsoup:是一款HTML解析器,通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。可以直接解析URL地址和HTML文本内容
- PULL:安卓OS内置的解析器,使用SAX方式。
4 Jsoup
4.1 使用Jsoup
- 导入jar包
- 获取Document对象
- 获取对应的标签Element对象
- 获取数据
public static void main(String[] args) throws IOException {//获取xml的pathString path = JsoupDemo.class.getClassLoader().getResource("student.xml").getPath();System.out.println(path);/*E:/JavaLearn/project/JavaScript/out/production/JavaScript/student.xml*///解析xml文档 加载文档进内存 获取dom树Document document = Jsoup.parse(new File(path), "utf-8");//获取Element元素对象Elements elements = document.getElementsByTag("name");//获取第一个name的element对象Element element = elements.get(0);String name = element.text();System.out.println(name);}
4.2 对象的使用
主要对象
- Jsoup是一个工具类,可以解析html或xml文档,返回Document对象
- Document是文档对象,代表内存中的DOM树
- Elements是元素Element对象的集合,可以当作ArrayList<Element>来使用
- Element是元素对象,可以获取元素的属性和文本等
- Node是节点对象,是以上对象的父亲。
4.2.1 Jsoup对象
Jsoup主要方法
Jsoup.parse(File in, String charset)
用来解析html和xml文档返回Document对象,参数是XML或HTML文件Jsoup.parse(String html)
可以解析xml或html格式的字符串,返回DOM对象Jsoup.parse(URL url, int timeoutMills)
通过网络获取指定的html或xml文档对象
爬虫解析HTML时常用
public static void main(String[] args) throws IOException {URL url = new URL("https://www.baidu.com");Document parse = Jsoup.parse(url, 10000);System.out.println(parse);}
4.2.2 Document对象
getElementById(String id)
根据id属性值获取唯一的element对象getElementsByTag(String name)
根据标签名获取元素对象的集合getElementsByAttribute(String key)
根据属性名称获取元素对象的集合getElementsByAttributeValue(String key, String value)
根据对应的属性名和属性值获取元素对象
4.2.3 Element对象
获取子元素对象
getElementById(String id)
根据id属性值获取唯一的element对象getElementsByTag(String name)
根据标签名获取元素对象的集合getElementsByAttribute(String key)
根据属性名称获取元素对象的集合getElementsByAttributeValue(String key, String value)
根据对应的属性名和属性值获取元素对象
获取属性值
String attr(String key)
:根据属性名称获取属性值
获取文本内容
String text()
:获取文本内容String html()
:获取标签体的所有内容 包括子标签的字符串内容
public static void main(String[] args) throws IOException {String path = JsoupDemo.class.getClassLoader().getResource("student.xml").getPath();Document document = Jsoup.parse(new File(path), "UTF8");//通过DOM对象获取name标签 可以获取所有的name标签Elements elements = document.getElementsByTag("name");System.out.println(elements.size());//通过ELement对象获取name标签Element student = document.getElementsByTag("student").get(0);//第一个标签//通过Element对象获取子标签对象Elements name = student.getElementsByTag("name");System.out.println(name.size());//获取student的属性值String number = student.attr("number");System.out.println(number);//获取文本内容String text = elements.text();System.out.println(text);//仅获取文本System.out.println(elements.html());//获取子标签和文本}
4.3 快捷查询方式
4.3.1 selector选择器
Elements select(String cssQuery)
- 语法:参考selector类的文档
public static void main(String[] args) throws IOException {String path = JsoupDemo.class.getClassLoader().getResource("student.xml").getPath();Document document = Jsoup.parse(new File(path), "UTF8");//查询name标签Elements name = document.select("name");//标签选择器System.out.println(name+"\n");//查询id值为XXX的元素Elements select = document.select("#smalltom");System.out.println(select+"\n");//获取student标签并且number属性值为 001 的age子标签Elements select1 = document.select("student[number='001']");//1. 获取student标签并且number属性值为 001System.out.println(select1+"\n");//2. 获取001的student标签子标签Elements select2 = document.select("student[number='001'] > age");System.out.println(select2);}
4.3.2 XPath
XML路径语言,用来确定XML文档中查找信息的语言
对DOM树形结构进行操作
需要导入JsoupXpath的jar包
查询w3cshool的参考手册区使用XPath的语法进行查询
public static void main(String[] args) throws IOException, XpathSyntaxErrorException {String path = JsoupDemo.class.getClassLoader().getResource("student.xml").getPath();Document document = Jsoup.parse(new File(path), "UTF8");//根据DOM对象创建JXDocumentJXDocument jxDocument = new JXDocument(document);//查询所有student标签List<JXNode> jxNodes = jxDocument.selN("//student");System.out.println(jxNodes+"\n");//查询所有student标签下的所有name标签List<JXNode> jxNodes1 = jxDocument.selN("//student/name");System.out.println(jxNodes1+"\n");//查询所有student标签下带id属性的name标签List<JXNode> jxNodes2 = jxDocument.selN("//student/name[@id]");System.out.println(jxNodes2+"\n");//查询所有student标签下带id属性的name标签 且属性值为XXXList<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id='XXX']");System.out.println(jxNodes3);}
【JavaWeb】XML和Jsoup的相关内容相关推荐
- JavaWeb:XML总结
JavaWeb:XML总结 目录 JavaWeb:XML总结 一:什么是XML? 二:xml语法: 三: xml约束: 四:XML解析思想: 一:什么是XML? XML:eXtensible Mark ...
- Spring 5 DI 相关内容 5.2 构造器 注入 5.2.5 构造器注入的一些问题
Spring [黑马程序员2022新版SSM框架教程_Spring+SpringMVC+Maven高级+SpringBoot+MyBatisPlus企业实用开发技术] 5 DI 相关内容 文章目录 S ...
- Spring 5 DI 相关内容 5.3 自动配置 5.3.4 完成自动装配的配置
Spring [黑马程序员2022新版SSM框架教程_Spring+SpringMVC+Maven高级+SpringBoot+MyBatisPlus企业实用开发技术] 5 DI 相关内容 文章目录 S ...
- python的txt、csv、ini、xml、excel文件相关操作
python的txt.csv.ini.xml.excel文件相关操作 函数,一个用于专门实现某个功能的代码块(可重用) 内置函数 len.bin.oct.hex 等 自定义函数 # 定义了一个函数,功 ...
- iOS 发布APP关于IDFA的相关内容
您的 App 正在使用广告标识符 (IDFA).您必须先提供关于 IDFA 的使用信息或将其从 App 中移除,然后再上传您的二进制文件. 如果出现下边这两张图,你就会感到蛋蛋的忧伤 还有这个 怎么解 ...
- golang实践LSM相关内容
LSM LSM(log-structured merge-tree)是一种分层,有序,面向磁盘的数据结构,其核心思想是充分了利用了,磁盘批量的顺序写要远比随机写性能高出很多,在计算机科学中,日志结构的 ...
- Assembly--及相关内容
Assembly--及相关内容 0.2672019.06.04 09:29:26字数 448阅读 88 De novo genome assembly Hybrid error correction ...
- Android开发环境——Eclipse ADT相关内容汇总
Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关 ...
- 基于KNN的相关内容推荐
如果做网站的内容运营,相关内容推荐可以帮助用户更快地寻找和发现感兴趣的信息,从而提升网站内容浏览的流畅性,进而提升网站的价值转化.相关内容 推荐最常见的两块就是"关联推荐"和&qu ...
最新文章
- Kotlin 使用list.add 时候报错的处理方法
- 命令行调用springboot服务_Spring Boot命令行界面的使用
- 烂泥:通过vsphere给esxi添加本地硬盘
- duilib消息事件产生和分发解释
- 那些与 IE 相伴的日子
- erlang 读取confg文件异常 could not start kernel pid error in config file
- DAY8-Nessus漏洞扫描
- RobotFramework自动化测试框架-移动手机自动化测试Clear Text关键字的使用
- Python以TCp搭建小游戏服务器
- opencv 曲线拟合
- 关于触摸板设备USB映射虚拟桌面的VID与PID
- iOS中 断点下载详解 韩俊强的博客
- JAVA多线程设计模式篇 4、Guarded Suspension 模式——等我准备好了再来
- 消息服务器待办事项数据库,关联联系信息的工作管理系统及其方法
- 分享几个实用的神器APP系列(三)
- 74HC138芯片简析
- 伯努利分布(Bernoulli distribution)
- 以圆桌骑士为例浅尝HTML5游戏开发
- 多家企业宣布将终止与B站合作
- 网络安全通识全解|第15期 白帽、黑帽、灰帽,黑客的差异!
热门文章
- 移植U-Boot思路和实践 | 基于RK3399
- 文本或代码中 \n 和 \r 的区别
- QT——设置可执行文件图标
- python 爬虫是什么_“python爬虫“是什么呢?
- OpenCV_11 轮廓检测:图像的轮廓+绘制轮廓+轮廓近似+边界矩形+椭圆拟合+直线拟合
- 论文阅读 - TransNet and TransNet V2
- LeetCode 489. 扫地机器人(DFS)
- LeetCode 345. 反转字符串中的元音字母
- 程序员面试金典 - 面试题 17.05. 字母与数字(哈希map+思维转换)
- LeetCode 454. 四数相加 II(哈希)