XML笔记

1.概念:

Extensible Markup Language可扩展标记语言

2、可扩展:

标签都是自定义的:如<user> <student>
功能:存储数据
1.配置文件
2.在网络中传输

3、xml与html的区别:

(1) xml标签都是自定义的,html标签是预定义。
(2) xml的语法严格,html 语法松散
(3) xml 是存储数据的,html 是展示数据

4、语法:

(1)基本语法:
	1. xml文档的后缀名. xml
	2. xml第一行必须定义为文档声明
	3. xml文档中有且仅有一个根标签
	4.属性值必须使用引号(单双都可)引起来
	5.标签必须正确关闭
	6. xml标签名称区分大小写

(2)快速入门:

<?xml version='1.0' ?> 
<users>
	<user id='1'>
		<name>zhangsan</name>
		<age>23</age>
		<gender>male</ gender>
	</user>
	<user id='2'>
		<name>lisi</name>
		<age>24</age>
		<gender>male</ gender>
	</user>
</users>
(3)组成部分:
文档声明
格式: <?xml 属性列表?> 
属性列表:
version:版本号,必须的属性
encoding :编码方式。告知解析引擎当前文档使用的字符集,默认值:ISO- 8859-1
standalone:是否独立(yes、no)
指令:结合css的(了解)如:`<?xml-stylesheet type="text/css" href="a.css" ?>`

标签:命名规则与java命名差不多,有一点:不能以xml开始
属性:id属性值唯一
文本:CDATA区:在该区域数据会原样展示
格式:<![CDATA[ 数据 ]]>

(4)约束:规定xml文档的书写规则
	作为框架的使用者(程序员) :
		-能够在xml中引入约束文档
		-能够简单的读懂约束文档
分类:
1. DTD:一种简单的约束技术
2. schema:一种复杂的约束技术
DTD:
	*内部dtd :将约束规则定义在xml文档中
	*外部dtd :将约束的规则定义在外部的dtd文件中
	本地: <!DOCTYPE根标签名SYSTEM "dtd文件的位置">
	网络: <!DOCTYPE根标签名PUBLIC "dtd文件名字”"dtd文件的位置URL">
Schema :
	引入:填写xml文档的根元素
	引入xsi前缀:
		xmlns :xsi="http: //www. W3.org/2001/XMLSchema-instance"
	引入xsd文件命名空间:
		xsi : schemalocation="http:/ /www.itcast.cn/xml student. xsd"
	为每一个xsd约束声明一个前缀,作为标识:
		xmlns="http://www.itcast.cn/xml"

例:

<students xmlns:xsi="http://www . W3. org/ 2001/XMLSchema-instance"
xmlns:a="http://www. itcast.cn/xml"
xsi : schemalocation="http: //www. itcast.cn/xmlstudent .xsd">
其中a为前缀
以后要用a里面的标签,就得加a的前缀才能使用

(5)解析:操作xml文档,将文档中的数据读取到内存中
操作xml文档
	1.解析(读取) :将文档中的数据读取到内存中
	2.写入:将内存中的数据保存到xml文档中。持久化的存储
解析xml的方式:
	1. DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
		优点:操作方便,可以对文档进行CRUD的所有操作
		缺点:占内存
	2. SAX: 逐行读取,基于事件驱动的。
		优点:不占内存。
		缺点:只能读取,不能增删改

5、xml常见的解析器:

(1)JAXP:sun公司,不好用
(2)DOM4J:优秀
(3)Jsoup
(4)PULL:Android内置解析器,sax方式的

6、Jsoup:

步骤:
(1)导入jar包
在IDEA中点击jar包右键选择Add as Library然后点确定就好了
(2)获取Document对象
①获取路径:

String path = 类名.class.getClassLoader().getResource("目标xml文件").getPath();

②通过路径获取对象:

Document document = Jsoup.parse(new File(path),"编码方式(如utf-8)");

(3)获取对应的标签Element对象

getElementById(String id) :根据id属性值获取唯一的element对象
getElementsByTag(String tagName) : 根据标签名称获取元素对象集合
getElementsByAttribute(String key) : 根据属性名称获取元素对象集合
getElementsByAttributeValue(String key, String value) :根据对应的属性名和属性值获取元素对象集合

(4)获取数据

System.out.println(element.text());//输出文本

示例:

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 {
        //1、获取文档对象
        //先获取student.xml的path
        String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
        System.out.println(path);
        //解析xml文档,加载进内存,获取dom树--->Document
        Document document  = Jsoup.parse(new File(path),"utf-8");
        //2、获取元素对象Element
        Elements elements = document.getElementsByTag("name");
        //获取第一个name标签的Element对象
        Element element = elements.get(0);
        //3、获取数据
        System.out.println(element.text());
    }
}
注意:在获取path的时候,要注意本类所在的路径中,不能有中文,空格等特殊的符
号,否则获取出来的路径会有错误,导致获取到的路径会报错!!!

(5)获取Element对象的方法:

//1、获取所有student对象
        Elements elements = document.getElementsByTag("student");
        //2、获取属性中有id的所有对象
        Elements elements1 = document.getElementsByAttribute("id");
//        System.out.println(elements1);
        //3、获取number属性为s001的所有对象
        Elements elements2 = document.getElementsByAttributeValue("number","s001");
//        System.out.println(elements2);
        //4、获取id值为1的对象
        Element element = document.getElementById("1");
        System.out.println(element);
(6)获取Element对象的属性值:String attr(“属性名”);
	 获取文本内容:String text()获取所有子标签的纯文本内容
	String html()获取标签体的所有内容(标签和文本)

示例:

String s = document.getElementsByTag("student").get(0).attr("number");
        System.out.println(s);
-------------------------------------------------------------------------
System.out.println(document.getElementsByTag("name").text());
    System.out.println(document.getElementsByTag("student").html());
(7)快捷查询方式:
	1、selector :选择器
		*使用的方法: Elements  select(String cssQuery)
		*语法:参考Selector类中定义的语法
	2、XPath : XPath即为XML路径语言,它是一种用来确定XML (标准通用标记语言的	
			子集)文档中某部分位置的语言
				*使用Jsoup的Xpath需要额外导入jar包。
				*查询w3cshool参考手册,使用xpath的语法完成查询
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值