XML,Extensible Markup Language可扩展标记语言(也是由w3c(万维网联盟)推出的)。可扩展,标签都是自定义的,如<uesr>、<student>。其主要功能就是存储数据,用于配置文件使用,另外存储的数据可以在网络中传输。
【举例】:xml语法
<?xml version='1.0' ?>
<users>
<user id='1'>
<name>zhangsan</name>
<age>10</age>
<gender>male</gender>
</user>
<user id='2'>
<name>lisi</name>
<age>11</age>
<gender>female</gender>
</user>
</users>
1、文档声明 格式:<?xml 属性列表 ?> 属性列表:version,版本号,必须 属性,当前为1.0 encoding,编码方式,告知解析引擎当前文档使用的字符集,默认为ISO-8859-1 standalone,是否独立,值为yes表示不依赖其他文件,值为no表示依赖其他文件。
2、指令(了解):结合CSS的
3、标签:名称自定义的, 规则:
4、属性:id属性值唯一
5、文本:CDATA区:在该区域中 数据会被原样展示<![CDATA[ 数据 ]]>
约束是规定xml文档的书写规则,作为框架的使用者(程序员),需要能够在xml中引入约束文档,且能够简单的读懂约束文档。约束技术的分类:
1)DTD,引入dtd文档到到xml文档中: 内部dtd:将约束规则定义在xml文档中(了解,不常用) 外部dtd:将约束规则定义在外部的dtd文件中 本地:<!DOCTYPE 跟标签名 SYSTEM "dtd文件的位置"> 网络:<!DOCTYPE 跟标签名 PUBLIC "dtd文件名字" "dtd文件位置URL">
2)Schema,引入schema文档到xml: 1.填写xml文档的根元素 2.引入xsi前缀. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3.引入xsd文件命名空间. xsi:schemaLocation="http://www.itcast.cn/xml student.xsd" 4.为每一个xsd约束声明一个前缀,作为标识 xmlns="http://www.itcast.cn/xml"
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.itcast.cn/xml" xsi:schemaLocation="http://www.itcast.cn/xml student.xsd">
解析,指的是操作xml文档,将文档中的数据读取到内存中,操作xml文档操作方式有两种:
1、DOM:将标记语言文档一次性加载至内存,在内存中形成一颗dom树 优点:操作方便,可以对文档进行CRUD的所有操作,一般用于服务器 缺点:占内存
2、SAX:逐行读取,基于事件驱动 优点:不占内存,适用于内存较小的设备,如手机 缺点:只能读取,不能增删改。
1、Jsoup是免费的第三方开源解析器,快速入门步骤:
【举例】:Jsoup解析器读取sudent.xml文档内容
public class JsoupDemo1 {
public static void main(String[] args) throws IOException {
//获取document对象,根据xml文档
//获取student.xml的path
String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
//解析xml文档,加载文档进内存,获取dom树;
Document document = Jsoup.parse(new File(path), "utf-8");
//获取元素对象Element
Elements elements = document.getElementsByTag("name");
System.out.println("个数:"+elements.size());
Element element = elements.get(0);
String name = element.text();
System.out.println("name:"+name);
}
}
2、对象的使用
URL url = new URL("https://baike.baidu.com/item/jsoup/9012509?fr=aladdin");
Document document = Jsoup.parse(url, 20000);
System.out.println(document);
3、Jsoup快捷查询方式
public class JsoupDemo1 {
public static void main(String[] args) throws IOException {
//获取document对象,根据xml文档
//获取student.xml的path
String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
Document document = Jsoup.parse(new File(path), "utf-8");
//查询name标签
Elements elements = document.select("name");
System.out.println(elements);
//查询id值为001
Elements element = document.select("001");
System.out.println(element);
//获取student标签,且number属性值为s001的age子标签
Elements elements1 = document.select("student[number='s001'] > age");
System.out.println(elements1);
}
}
public class JsoupDemo1 {
public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
//获取document对象,根据xml文档
//获取student.xml的path
String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
Document document = Jsoup.parse(new File(path), "utf-8");
//创建JXDocument对象
JXDocument jxDocument = new JXDocument(document);
//结合Xpath语法查询
//查询所有student便签
List<JXNode> jxNodes = jxDocument.selN("//student");
for (JXNode jxNode : jxNodes) {
System.out.println(jxNode);
}
//查询所有student便签下name标签
List<JXNode> jxNodes2 = jxDocument.selN("//student/name");
for (JXNode jxNode : jxNodes2) {
System.out.println(jxNode);
}
//查询student标签下带id属性的name标签
List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id]");
for (JXNode jxNode : jxNodes3) {
System.out.println(jxNode);
}
//查询student标签下带id属性的name标签,且id属性值为001
List<JXNode> jxNodes4 = jxDocument.selN("//student/name[@id='001']");
for (JXNode jxNode : jxNodes4) {
System.out.println(jxNode);
}
}
}