0
点赞
收藏
分享

微信扫一扫

前端学习之XML入门和Jsoup


前端学习之XML入门和Jsoup_html


前端学习之XML入门和Jsoup_html_02


前端学习之XML入门和Jsoup_java_03


前端学习之XML入门和Jsoup_xml_04


这里的<users>和</users>是根标签,其中的id就是它的属性。

前端学习之XML入门和Jsoup_java_05


前端学习之XML入门和Jsoup_html_06


前端学习之XML入门和Jsoup_自定义类型_07


前端学习之XML入门和Jsoup_java_08


前端学习之XML入门和Jsoup_html_09


前端学习之XML入门和Jsoup_自定义类型_10

前端学习之XML入门和Jsoup_xml_11


前端学习之XML入门和Jsoup_java_12

前端学习之XML入门和Jsoup_xml_13

约束

前端学习之XML入门和Jsoup_自定义类型_14

前端学习之XML入门和Jsoup_html_15


前端学习之XML入门和Jsoup_xml_16

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

前端学习之XML入门和Jsoup_自定义类型_17


外部dtd

前端学习之XML入门和Jsoup_java_18

前端学习之XML入门和Jsoup_html_19


前端学习之XML入门和Jsoup_java_20


<xsd:element name=“students” type=“studentsType”>: 定义标签,名为students,并且类型为studentsType的自定义类型。

前端学习之XML入门和Jsoup_自定义类型_21


<xsd:complexType name=“studentsType”>:定义自定义类型,名字为studentsType。

<xsd:sequence>:指定按顺序出现

<xsd:element name=“student” type=“studentType” minOccurs=“0” maxOccurs=“unbounded”>: 定义标签,名为student,并且类型为studentType的自定义类型,出现次数最小0次,最多没有限制。

前端学习之XML入门和Jsoup_xml_22


<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的自定义类型,并且是必须的。

前端学习之XML入门和Jsoup_html_23


sexType自定义类型是一个简单的类型,并且有限制,基本类型是字符型,两个枚举值为"male"、“female”。

前端学习之XML入门和Jsoup_html_24


ageType自定义类型是一个简单的类型,并且有限制,基本类型是整型,最小值为0,最大值为256。

前端学习之XML入门和Jsoup_自定义类型_25


numberType自定义类型是一个简单的类型,并且有限制,基本类型是字符型,有正则表达式限制,为"heima_\d{4}"。

前端学习之XML入门和Jsoup_html_26


​​W3C XML schema​​

解析XML

前端学习之XML入门和Jsoup_自定义类型_27


前端学习之XML入门和Jsoup_xml_28

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

前端学习之XML入门和Jsoup_xml_29


前端学习之XML入门和Jsoup_java_30


student.xml的数据如下:

前端学习之XML入门和Jsoup_自定义类型_31

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);
}
}

前端学习之XML入门和Jsoup_xml_32


前端学习之XML入门和Jsoup_自定义类型_33

前端学习之XML入门和Jsoup_xml_34


前端学习之XML入门和Jsoup_java_35


前端学习之XML入门和Jsoup_自定义类型_36


前端学习之XML入门和Jsoup_自定义类型_37

前端学习之XML入门和Jsoup_xml_38


前端学习之XML入门和Jsoup_html_39


前端学习之XML入门和Jsoup_java_40


前端学习之XML入门和Jsoup_xml_41

//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);

前端学习之XML入门和Jsoup_html_42

//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);


举报

相关推荐

0 条评论