【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

  1. 导入jar包
  2. 获取Document对象
  3. 获取对应的标签Element对象
  4. 获取数据
    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);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | Learning with Noise: Supervised Relation Extraction

Luo B, Feng Y, Wang Z, et al. Learning withNoise: Enhance Distantly Supervised Relation Extraction with Dynamic TransitionMatrix[C]// Meeting of the Association for Computational Linguistics.2017:430-439.链接&#xff1a;http://www.aclweb.org/anthology/P/P1…

项目架构之传统三层架构和领域模型三层架构

一、架构之传统三层架构 传统三层架构是一种软件架构&#xff0c;是一种典型的、基于贫血模型的、面向过程的JavaWeb分层方式。该架构分为以下三个层次&#xff1a; 数据访问层&#xff08;DAL - Data Access Layer&#xff09;即对包括数据库在内的数据源进行操作的部分。业务…

服务器 | 安装最新版R和Rstudio(3.5.3)

前言 目前为止&#xff0c;除了WGCNA分析要求内存比较高以外&#xff0c;windows下的R和Rstudio都能满足我的使用需求。 近来&#xff0c;再分析师兄的RNA-seq数据&#xff0c;两种处理5个时间点&#xff0c;差异基因很少&#xff0c;表型数据很多&#xff0c;想着再做个WGCNA分…

限定域文本语料的短语挖掘(Phrase Mining)

一只小狐狸带你解锁NLP/ML/DL秘籍正文来源&#xff1a;丁香园大数据前言短语挖掘&#xff08;Phrase Mining&#xff09;的目的在于从大量的文本语料中提取出高质量的短语&#xff0c;是NLP领域中基础任务之一。短语挖掘主要解决专业领域&#xff08;如医疗、科技等&#xff09…

论文浅尝 | Hike: A Hybrid Human-Machine Method for Entity Alignment

Zhuang Y,Li G, Zhong Z, et al. Hike: A Hybrid Human-Machine Method for Entity Alignmentin Large-Scale Knowledge Bases[C]// ACM, 2017:1917-1926. ( CIKM 2017 )论文链接&#xff1a;http://dbgroup.cs.tsinghua.edu.cn/ligl/crowdalign.pdfMotivation随着语义网络的迅…

【HTML/CSS】CSS权重、继承及引入方式

1 CSS权重 1.1 权重规则 CSS匹配的选择器中每一种选择器类型的数组决定了选择器的权重&#xff0c;CSS的优先级规则&#xff1a; 权重高的样式会被应用到元素上。如果权重相同则使用最后声明的样式。属性后加上!important&#xff0c;无条件优先 1.2 权重计算 内联样式的权…

TCC分布式实现原理及分布式应用如何保证高可用

一、业务场景介绍 咱们先来看看业务场景&#xff0c;假设你现在有一个电商系统&#xff0c;里面有一个支付订单的场景。 那对一个订单支付之后&#xff0c;我们需要做下面的步骤&#xff1a; 更改订单的状态为“已支付”扣减商品库存给会员增加积分创建销售出库单通知仓库发货…

IJCAI 2018:中科院计算所:增强对话生成一致性的序列到序列模型

IJCAI 2018&#xff1a;中科院计算所&#xff1a;增强对话生成一致性的序列到序列模型文章来源&#xff1a;企鹅号 - 读芯术你和“懂AI”之间&#xff0c;只差了一篇论文号外&#xff01;又一拨顶会论文干货来袭&#xff01;2018年6月9-10日&#xff0c;代表学术界和工业界的顶…

一时学习一时爽,持续学习持续爽

一只小狐狸带你解锁NLP/ML/DL秘籍作者&#xff1a;小鹿鹿鹿 net~net~你围棋下的这么好&#xff0c;斗地主应该也不错吧不敢当不敢当但是人家柯洁才得了欢乐斗地主全国第一呢那让老夫也学习学习吧~巴拉巴拉小魔仙Training。。。net net stop&#xff01;你怎么斗地主还没学会&am…

【HTML/CSS】HTML元素种类的划分

1 种类划分 1.1 块级元素 特征&#xff1a;独占父元素的一行&#xff0c;可以设置宽高&#xff0c;高度默认由内容决定。常用标签&#xff1a;div、p、h1~h6、ul、ol、li、dl、dt、dd、table、form不常用标签&#xff1a;pre用来定义预格式化文本&#xff0c;pre内的文本会保…

基于“大中台+小前台”思想的电商系统总体架构设计

一、架构总原则 1. 大中台小前台的架构思路 2. 业务中台采用领域驱动设计&#xff08;DDD&#xff09;&#xff0c;在其上构建业务能力SAAS&#xff0c;持续不断进行迭代演进。 3. 平台化定位&#xff0c;进行了业务隔离设计&#xff0c;方便一套系统支撑不同玩法的业务类型和便…

问答系统总结

最近在研究问答系统,但是在查找资料的过程中一直处于懵逼状态,因为问答系统分类比较多,根据不同的依据可以分为不同种类,总是搞混,也没有找到资料详细全面的介绍,所以在一边学习查找资料的同时,自己也整理出一份总结,用于以后学习过程不至于思路混乱,如有错误请帮忙指出.19世纪…

论文写作葵花宝典

一只小狐狸带你解锁NLP/DL/ML秘籍作者&#xff1a;小鹿鹿鹿论文写作套路老板说&#xff1a;写论文是有套路的老板说&#xff1a;introduction写好了&#xff0c;论文就成功了一半老板说&#xff1a;你的motivation是什么&#xff0c;contribution又是啥&#xff1f;小夕说&…

李涓子 | 机器智能加速器:大数据环境下知识工程的机遇和挑战

本文转载自公众号&#xff1a;数据派THU。 导读&#xff1a;知识图谱已经成为推动人工智能发展的核心驱动力之一。本文选自清华大学计算机科学与技术系教授、清华-青岛数据科学研究院科技大数据研究中心主任李涓子老师于201…

【HTML/CSS】CSS盒模型及其理解

1 盒模型 概念&#xff1a;CSS盒模型本质是一个盒子&#xff0c;包括&#xff1a;外边距margin、边框border、内边距padding、内容content 分类&#xff1a;标准盒模型&#xff08;W3C&#xff09;和怪异盒模型&#xff08;IE&#xff09; 标准盒模型&#xff1a;width的值就是…

Netty异步非阻塞事件驱动及原理详解

本文基于 Netty 4.1 展开介绍相关理论模型、使用场景、基本组件、整体架构&#xff0c;知其然且知其所以然&#xff0c;希望给大家在实际开发实践、学习开源项目方面提供参考。 Netty 是一个异步事件驱动的网络应用程序框架&#xff0c;用于快速开发可维护的高性能协议服…

文本预处理跑得慢?抱抱脸团队又放福利,1GB文本语料分词只需20s!

一只小狐狸带你解锁NLP/DL/ML秘籍正文素材来源&#xff1a;量子位缘起BERTBERT带来的并不是只有一大波paper和嗷嗷上线&#xff0c;还带火了一个NLP团队——Huggingface&#xff08;中文译作抱抱脸&#xff09;。抱抱脸团队是一个创业团队。他们的Transformers是github上最火的…

基于深度学习的FAQ问答系统

| 导语 问答系统是信息检索的一种高级形式&#xff0c;能够更加准确地理解用户用自然语言提出的问题&#xff0c;并通过检索语料库、知识图谱或问答知识库返回简洁、准确的匹配答案。相较于搜索引擎&#xff0c;问答系统能更好地理解用户提问的真实意图, 进一步能更有效地满足用…

【HTML/CSS】定位方式及区别

1 文档流 文档流是浏览器默认的排版方式 文档流的排版方式是块级元素垂直排布&#xff0c;行内元素和行内块元素水平排布。 2 脱离文档流 脱离文档流是不按照文档流的排版方式进行排版&#xff0c;脱离后&#xff0c;元素不在布局中&#xff0c;不在流中占有位置&#xff0c…

基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba的企业级微服务敏捷开发系统架构

一、项目总体架构图 二、功能介绍 2.1、统一认证功能 支持oauth2的四种模式登录 支持用户名、密码加图形验证码登录 支持手机号加密码登录 支持openId登录 支持第三方系统单点登录 2.2、分布式系统基础支撑 服务注册发现、路由与负载均衡 服务降级与熔断 服务限流(url/方法级别…