# XML
1. 概念:Extensible Markup Language 可扩展性标记语言 可扩展:标签都是自定义的。 <user> <student> 功能 存储数据 1. 配置文件 2. 在网络中传输 xml与html的区别 1. xml标签是自定义的。html标签是预定义 2. xml语法严谨,html语法松散 3. xml是存储数据的,html是展示数据 2. 语法: 基本语法: 1. xml文档的后缀名 .xml 2. xml第一行必须定义为文档声明 3. xml文档中有且仅有一个根标签 4. 属性值必须使用引号引起来 5. 标签必须正确关闭 6. 标签名称区分大小写 快速入门: <?xml version='1.0' encoding="utf-8" standalone='no'?> <users> <user id='1'> <name>zhangsan</name> <age>23</age> <gender>male</gender> <br/> </user> </users> 组成部分: 1. 文档声明 1. 格式:<?xml 属性列表 ?> 2. 属性列表: version:版本号,必须的属性 encoding:蝙蝠方式 standalone:是否独立 no:依赖其他文件 2. 标签:标签名称自定义的 规则: 可以包含字母,数字以及其他字符 不能与数字或者标点开始 不能与xml,html开始 不能包含空格 3. 属性: id属性值唯一 4. 文本: CDTA区:在该区域中的数据会被鸳鸯展示 格式: <![CDTA[ 数据 ]]>
约束:规定xml文档的书写规则 在xml中引入约束文档 分类: 1. DTD:一种简单的约束技术 2. Schema:一种复制的约束技术
DTD: 引入dtd文档到xml文档中 内部dtd:将约束规则定义在xml文档中 外部dtd:在外部的dtd文件 本地:<!DOCTYPE 跟标签名 SYSTEM "dtd文件位置"> <!DOCTYPE students SYSTEM "student.dtd"> 网络:<!DOCTYPE 跟标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
Schema: 引入: 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">
3. 解析:操作xml文档,将文档中的数据读取到内存中 操作xml文档 1. 解析:解析(读取):将文档中的数据读取到内存中 2. 写入:将内存中的数据保存到xml文档中。持久化的存储 解析xml的方式:(面试题) 1. DOM:一次性加载进内存,在内存中形成一颗dom树 优点:操作方便,可以对文档进行CRUD的操作 缺点:占内存 2. SAX:逐行读取,读一行抛弃一行,与前面内容无关 优点:不占内存 缺点:只能读取,不能CRUD
xml常见的解析器: 1. JAXP:sun公司提供的解析器,支持dom和sax两种思想 2. DOM4J:一款非常优秀的解析器 3. Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 4. PULL:Android操作系统内置的解析器,sax方式的。
Jsoup 快速入门: 步骤: 1. 导入jar包 jsoup-1.11.2.jar 2. 获取Document对象 3. 获取对应的标签Element对象 4. 获取数据 //2.1获取student.xml的路径 String path = jsoupDemo01.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"); //3.1 获取第一个name的Element对象 Element element = elements.get(0); //3.2 获取数据 String name = element.text(); System.out.println(name); 对象的使用: 1. Jsoup:工具类,可以解析html或xml文档,返回Document parse:解析html或xml文档,返回Document parse(File in,Sting charsetName):解析文件 ---常用 parse(String html):解析字符串 parse(URL url,int timeoutMillis):通过网上路径获取文档对象 2. Document:文档对象。 获取Element对象 getElementById(String id):根据id属性值获取对象 getElementsByTag(String tagName):根据标签名称获取对象 getElementsByAttribute(String key):根据属性值获取对象 getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取对象 //3.1获取所有Document对象 Elements elements = document.getElementsByTag("student"); //3.2获取属性值为id的元素对象们 document.getElementsByAttribute("id"); //3.2获取number属性值为heima_0001的元素对象 document.getElementsByAttributeValue("number", "heima_0001"); //3.3获取id属性值的元素对象 document.getElementById("itcast"); 3. Elements:元素Element对象的集合。可以当做 ArrayList<Element>来使用 4. Element:元素对象 1. 获取子元素对象 与Document四个方法一样 2. 获取属性值 String attr(String key):根据属性名称获取属性值 3. 获取文本内容 String text():获取文本内容(z值显示文字) String html():获取标签体的所有内容(包括子标签的字符串内容) //获取student对象的属性值 String number = ele_student.attr("number"); //获取文本内容 String text = ele_name.text(); String html = ele_name.html(); 5. Node:节点对象 是Document和Element的父类
快速查询方式: 1. selector:选择器 使用的方法:Elements select(String cssQuery) 语法:查看Selector类中定义的语法 2. XPath:XPathXPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言 导入jar包 JsoupXpath-0.3.2.jar 查看w3cshool手册,使用xpath语法完成查询