欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > asp.net >内容正文

asp.net

【JavaWeb】XML和Jsoup的相关内容

发布时间:2024/7/5 asp.net 54 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【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的相关内容的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。