前端学习之XML入门和Jsoup

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里的<users>和</users>是根标签,其中的id就是它的属性。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

约束

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

<!ELEMNT students (student*)>:定义约束,标签名为students,并且可定义多个子标签student <!ELEMNT student (name,age,sex)>:定义约束,标签名为student,并且可定义子标签name、age、sex,数量为每个为一个 <!ELEMNT name (#PCDATA)>:定义约束,标签名为name <!ATTLIST students number ID #REQUIRED>:定义约束,标签名students的属性number,并且为ID(唯一不可重复),且是必须的#REQUIRED。

内部dtd
在这里插入图片描述
外部dtd
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
<xsd:element name=“students” type=“studentsType”>: 定义标签,名为students,并且类型为studentsType的自定义类型。
在这里插入图片描述
<xsd:complexType name=“studentsType”>:定义自定义类型,名字为studentsType。
<xsd:sequence>:指定按顺序出现
<xsd:element name=“student” type=“studentType” minOccurs=“0” maxOccurs=“unbounded”>: 定义标签,名为student,并且类型为studentType的自定义类型,出现次数最小0次,最多没有限制。
在这里插入图片描述
<xsd:complexType name=“studentType”>:定义自定义类型,名字为studentType。
<xsd:sequence>:指定按顺序出现
<xsd:element name=“name” type=“xsd:string”>: 定义标签,名为name,并且类型为字符串类型。
下面对age和sex标签进行定义。
<xsd:attribute name=“number” type=“numberType” use=“required”>:定义属性,名为number,类型为numberType的自定义类型,并且是必须的。
在这里插入图片描述
sexType自定义类型是一个简单的类型,并且有限制,基本类型是字符型,两个枚举值为"male"、“female”。
在这里插入图片描述
ageType自定义类型是一个简单的类型,并且有限制,基本类型是整型,最小值为0,最大值为256。
在这里插入图片描述
numberType自定义类型是一个简单的类型,并且有限制,基本类型是字符型,有正则表达式限制,为"heima_\d{4}"。

在这里插入图片描述
W3C XML schema

解析XML

在这里插入图片描述
在这里插入图片描述

SAX

DOM

DOM1级主要定义的是HTML和XML文档的底层结构。DOM2和DOM3级则在这个结构的基础上引入了更多的交互能力,也支持更高级的XML特性。DOM2和3级的目的在于扩展DOM API,以满足操作XML的所有需求,实现这一目标的很大程度上意味着对命名空间的支持。有了XML命名空间,不同XML文档的元素就可以混合在一起,共同构成格式良好的文档,而不必担心发生命名冲突。从技术上讲HTML不支持XML命名空间,但XHTML支持XML命名空间。命名空间要使用xmlns特性来指定。XHTML的命令空间是http://www.w3.org/1999/xhtml,在任何格式良好XHTML页面中,都应该将其包含在html元素中。

<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<title>Example XHTML page</title>
	</head>
	<body>
		Hello world!
	</body>
</html>

对于这个例子而言,其中的所有元素默认都被视为XHTML命名空间中的元素。要想明确地为XML命名空间创建前缀,可以使用xmlns后跟冒号,再后跟前缀。

<xmlns:html xmlns:xmlns="http://www.w3.org/1999/xhtml">
	<xmlns:head>
		<xmlns:title>Example XHTML page</xmlns:title>
	</xmlns:head>
	<xmlns:body>
		Hello world!
	</xmlns:body>
</xmlns:html>

关于DOM中对XML中的支持,后面的博客会详细讲解

Jsoup

在这里插入图片描述
在这里插入图片描述
student.xml的数据如下:
在这里插入图片描述

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.File;
import java.io.IOException;
public class JsoupDemo1 {
    public static void main(String[] args) throws IOException {
        //2.获取Document对象,根据xml文档获取
        //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);
    }
}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

		//2.获取Document对象,根据xml文档获取
        //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.查询name标签
        Elements elements = document.select("name");
        System.out.println(elements);
        //获取student标签并且number属性值为heima_0001的age子标签
        Elements elements2 = document.select("student[number='heima_0001']");
        System.out.println(elements2);
        Elements elements3 = document.select("student[number='heima_0001']>age");
        System.out.println(elements3);

在这里插入图片描述

 		//2.获取Document对象,根据xml文档获取
        //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.创建JXDocument对象
        JXDocument jxDocument = new JXDocument(document);
        //4.结合xpath语法查询
        //4.1查询所有student标签
        List<JXNode> jxNodes = jxDocument.selN("//student");
        for(JXNode jxNode: jxNodes)
            System.out.println(jxNode);
        //4.2查询所有student标签下的name标签
        List<JXNode> jxNodes2 = jxDocument.selN("//student/name");
        for(JXNode jxNode: jxNodes2)
            System.out.println(jxNode);
        //4.3查询所有student标签下带有id属性的name标签
        List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id]");
        for(JXNode jxNode: jxNodes3)
            System.out.println(jxNode);
        //4.4查询所有student标签下带有id属性的name标签,且id属性值为itcast
        List<JXNode> jxNodes4 = jxDocument.selN("//student/name[@id='itcast']");
        for(JXNode jxNode: jxNodes4)
            System.out.println(jxNode);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值