XML: eXtendsible markup language
作用:用来保存数据(少量数据)
可以用来配置文件
数据传输体(客户端<--->服务端),就像登入失败或成功都会返回数据,这些数据不仅仅只是“成功”或者“失败”
- 文档结构:倒状的树状图
- 声明或者定义XML:
- 文档声明:<? XML version="1.0" ?> version:解析这个XML的时候,使用哪个版本解析的。
- encoding: 解析文档使用的编码,也就是浏览器的解码格式。
- 电脑上的文件再保存的时候,并不是存储文字,而是二进制;识别二进制就用编码来识别。
- 小知识:ANSI(微软设计的,默认的本地编码)<---->gbk
- gb2312, GBK. (GBK 是gb2312的升级版;支持繁体字)
- 建议使用UTF-8
- standalone: no - 该文档以来关联其他文档, yes--表示该文档是以恶独立文档
- 元素(标签):
- 文档声明下面必须是 根标签
- 标签嵌套
- 空标签:</img>即是开始标签,又是结束标签。
- 标签里面的名字可以自己随便写。
命名规则: image.png
转义字符: image.png
注释: <!-- This is a comment -->
CDATA:
1, 如果某段字符串里面有过多的字符,并且里面包含了类似标签或者关键字的这种文本,不像让XML的解析器去解析。那么可以使用CDATA来包装。不过这个CDATA一般比较少看到,通常用在服务端给客户端返回数据的时候用到。
2, 格式: <des><![CDATA[<a herf = "http://www/baidu.com">百度一下吧</a>]]></des>
3, CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束
XML的解析:
XML的解析方式:
1,DOM:doument object model 把所有的文档读到内存当中,形成树状结构。
(1)整个文档称之为document对象,文本也可以称之为Text对象,以上所有的对象都可以称之为Node节点。如果XML特别大,那么将会造成内存的溢出。
(2)可以对文档进行增删操作
2,SAX:Simple API for Xml 基于时间驱动。读一行,解析一行。
(1) 不会造成内存溢出。
(2)不可以进行增删,只能查询。
(3)一些组织或公司,针对以上两种解析方式,给粗解决方案有哪些?
(4)jaxp sun公司
(5)jdom
(6)jom4j 使用比较广泛
代码实现:
先倒入dom4j.jar文件;jdk里面没有这个文件
遇到的错误:[图片上传失败...(image-470edd-1544147814292)]
image.png
工程里面有一个大的“!”号,一般都是因为重复导入jar文件引起的; buildPath出错,查看buildPath Library就可以发现和更改错误。jar文件尽量单个单个导入,不要多个jar文件夹的压缩格式。
- 入门代码:
package com.xieliting.xml;
import java.io.File;
import java.util.List;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.Document;
public class xml_dom4j {
public static void main(String[] args) {
//1, 创建sax读取对象
try {
SAXReader reader = new SAXReader(); //类似于jdbc: classloader
//2, 指定解析的XML源
Document document = reader.read(new File("src/xml/demo.xml"));
//3.得到元素
//得到根元素
Element rootElement = document.getRootElement();
//获得根元素下面的元素 age name
Element stu = rootElement.element("stu");
String age = stu.element("age").getText();
String name = stu.element("name").getText();
System.out.println("name:"+name+" age:"+age);
//获取所有的子元素、子孙元素
List<Elementelements = rootElement.elements();
//遍历所有的子元素
for (Element element : elements) {
List<Elementsubelements = element.elements();
//遍历所有的子孙元素
for (Element subelement : subelements) {
System.out.print(subelement.getName()+" ");
System.out.println(subelement.getText());
}
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
-
结果:
image.png
XML的高级应用:
-
dom4j里面支持Xpath的写法。xpath其实是xml的路径语言,支持我们为你在解析xml的时候,能够快速定位到具体的某个元素。
-
Interface Xpath (Xpath接口提供了一些方法)
image.png -
这些方法的参数需要遵循一套规则
image.png - 它也需要额外添加jar文件 image.png
-
路径:F:\BaiduNetdiskDownload\09.XML&tomcat(共28集)\code&资料\资料\xml\dom4j-1.6.1\lib (我自己的)
-
代码(用法)如下:
package com.xieliting.xml;
import java.io.File;
import java.util.List;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.Document;
public class xml_Xpath {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1, 创建sax读取对象
try {
SAXReader reader = new SAXReader(); //类似于jdbc: classloader
//2, 指定解析的XML源
Document document = reader.read(new File("src/xml/demo.xml"));
//3.得到元素
//得到根元素
Element rootElement = document.getRootElement();
//获得根元素下面的元素 age name
Element name_Element = (Element)rootElement.selectSingleNode("/stus/stu/name");
System.out.println(name_Element.getText());
//获取所有的子元素、子孙元素
List<Element> subelements = rootElement.selectNodes("/stus/stu/*");
//遍历所有的子元素
for (Element subelement : subelements) {
System.out.println(subelement.getText());
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
-
结果:
image.png
XML约束:(了解 )
DTD
-
语法自成一派,早起就出现了,可读性也比较差。需要stus.dtd约束文件。
image.png
image.png
在里面约束:
![image.png](https://img.haomeiwen.com/i8043783/1f069bb39fa33dea.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 元素个数:
- +:1个或多个
- *:0个或多个
Scheam
![image.png](https://img.haomeiwen.com/i8043783/f9564cd7e7dd6973.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image.png](https://img.haomeiwen.com/i8043783/2b9f469da0953453.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image.png](https://img.haomeiwen.com/i8043783/31427ac6322f1e94.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image.png](https://img.haomeiwen.com/i8043783/58a7b109d89b0608.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
命名空间的作用:一个XML如果想制定她的约束规则,只能指定一个约束规则DTD, 不鞥指定多个DTD;但是如果一个XML可以引用多个scheam规则,但是这能引用一个DTD规则。作用就是写元素的时候可以制定元素使用哪一套越是规则。
网友评论