XML简介:
XML是跨平台的语言,它不需要安装任何环境的语言,
它是所有语言所共有的,单独的语言,并且不是所有语言内部的。
它是让所有语言去和xml交互 。
注意: html前身是xml
<></>(整体)这就是标记(标签)
注意点: 标签可以随便写(自定义不会报错),所以叫可扩展。
==》不像Java 很严格。
< head> </ head >标记语言
注意点: 自定义的标签也不会报错
1.XML定义:
可扩展标记语言(1.标记 2.可扩展)
Extensible Markup Language
2.特点:
1.1 XML于操作系统、开发平台无关
1.2 实现不同系统间的数据交换
3.作用:
1.1 数据交互
1.2 配置应用程序
1.3 Ajax基石(基于XML)
4.文档结构
1.1创建XML
创建一个文档后缀名为xml,
(xml大小写没有严格的区分,Java有)
然后打开,把第一句话写上去,这样才算是xml,不然不是。
1.2查询/编辑(Design/Source)
1.3工程里创建xml
右击—New—other—XML File
注意点:
Java去解析xml的代码,但没有工具。
xml代码只有编译测试,没有运行测试。
1.4内容介绍:
<?xml version="1.0" encoding="UTF-8"?>
--》 声明
如下的都是 --》文档元素描述信息(文档结构)
<books>
<books/>
<!-- -->//注释<books id="1"><author>冰心</author><name>爱情</name></books>
</books>
注意点:
xml在eclipse运行不了 ,有波浪线不代表报错,
只是eclipse认为错,但Java可以。
5.文档标签
一层一层嵌套是父子关系,必须要有父亲(根节点)。
1.1 XML标签
XML文档内容有一系列标签元素组成
<元素名 属性名 = “属性值”>元素内容</元素名>
注意点:
属性值最好需要配值 没有取值 会编译报错 但没事 不算错
和Java不一样,但最好有值,因为可以对应匹配。
空元素:
(常见第二种)
<name> </name>
<name></name>
<name/>
注意点:
1.属性值用双引号包裹(单引号也可以 但不建议)
2.一个元素可以有多个属性
3.属性值中不能直接包含 <、“、&
4.属性值中不建议使用的字符:‘ 、>
6.XML编写注意事项
- 所有XML元素都必须有结束标签
- XML标签对大小写敏感
- XML必须正确的嵌套
- 同级标签以缩进对齐 (没有缩进是不标准的xml,但不是错的)
- 元素名称可以包含字母、数字或其他的字符
- 元素名称不能以数字或者标点符号开始
- 元素名称中不能含空格 (建议用英文)
7. 转义符
< <
> >
给我们看的 并不是真正的大于小于
“ "
‘ '
& &
–》 一般是在属性值上使用
<![CDATA[ ]]> -- 》 一般是在两个标签中间使用 (文本)
8. 案例实现
1.1 案例1:将如下衣服的尺码信息,使用XML文件保存
<?xml version="1.0" encoding="UTF-8"?>
<!-- 将如下衣服的尺码信息,使用XML文件保存 -->
<clothSize><size range="height<165">s</size><size range="165<height<170">M</size><size range="170<height<175">L</size><size range="175<height<180">XL</size><size range="180<height<185">XXL</size><size range="height>185">XXXL</size>
</clothSize>
1.2 案例2:编写XML表示学生成绩
<?xml version="1.0" encoding="UTF-8"?>
<studentScores><studnent name = "xz" expectedScore = "75"
actualScore = "80"></studnent><studnent name = "xl" expectedScore = "75"
actualScore = "88"></studnent><!-- 上面不推荐 下面推荐 --><student><name>xz</name><expectedScore>75</expectedScore><actualScore>80</actualScore></student><student><name>xl</name><expectedScore>75</expectedScore><actualScore>88</actualScore></student>
</studentScores>
9.解析XML
9.1 DOM
特点: 把文档解析成文档树
9.2 SAX(不常用)
9.3 DOM4J(常用)解析案例 (常用)
特点: 将DOM解析进行了一次封装
9.3.0常用API
Document接口: 定义XML文档
Element接口: 定义XML元素
Text接口: 定义XML本文节点
Attribute接口: 定义XML属性
9.3.1准备环境
(1)前提(准备物料dom4j-1.6.1.jar包)
将工程所有设置配置成utf-8,并导入jar包,并手工创建XML文件
- 在工程里创建一个lib-Folder
- 从外部导入dom4j-1.6.1.jar包
- 然后右击Build Path- Add to Build Path
生成本工程的一个引用库下的包(外部类库)
- 创建Dem4jXMLjava文件
9.3.2 加载DOM树
- 写个loadXML方法
/*** 1.加载DOM树*/Document doc = null;// 全局 变量public void loadXML() {//1.实例化SAXReader对象(读取)SAXReader saxReader = new SAXReader();
//import org.dom4j.io.SAXReader; 导包try {//引入read方法,去读取xmldoc = saxReader.read("src\\A.xml")
//import org.dom4j.Document; 导包
//import org.dom4j.DocumentException; 导包 System.out.println(doc);//测试有没有这个xml//加载xml成功,能打印出来,就能加载到我们的工程里} catch (DocumentException e) {e.printStackTrace();}}
结果:
xxx.xxx.xxx.DefaultDocument@1fb3ebeb [Document: name src\A.xml]
1.main方法
public static void main(String[] args) {Dem4jXML dem4jXML = new Dem4jXML();dem4jXML.loadXML();
//dem4jXML.addXML();
//dem4jXML.updateXML();dem4jXML.delete();dem4jXML.findXML();}
题外话:
查看saxReader.read的源码,
需要导包dom4j_src (关联源码),
但有没有这个不影响重要的是jar包。
attach Source – External location – External Folder
9.3.3 需求1(显示手机收藏信息)
/*** 2.查询XML*/public void findXML() {//Dem4jXML特有的Iterator//1.调用getRootElement()获取根元素Element root = doc.getRootElement();
//import org.dom4j.Element;导包//2.遍历儿子元素的集合Iterator brandInfos = root.elementIterator();
//import java.util.Iterator; 导包while(brandInfos.hasNext()) {//3.获取儿子元素Element brandInfo = (Element)brandInfos.next();System.out.println(brandInfo.attributeValue("name"));//得儿子元素节点的name属性值//4.遍历孙子元素(获取孙子节点对象)Iterator types = brandInfo.elementIterator();while(types.hasNext()) { //获取孙子元素节点Element type = (Element)types.next();System.out.println(type.attributeValue("name"));}}}
结果:
华为
Mate50 pro
p50 pro
nova 6
苹果
iphone12 pro
9.3.4 需求2(为手机收藏信息添加新的节点)
/*** 3.添加节点*/public void addXML() { //1.获取根元素Element root = doc.getRootElement();//2.添加儿子元素Element brandInfo = root.addElement("Brand");//3.给儿子元素添加name属性brandInfo.addAttribute("name", "三星");//4.添加孙子节点Element type = brandInfo.addElement("Type");//5.给孙子元素添加name属性type.addAttribute("name", "note8 pro");//以上添加节点在xml显示不出来,所以才有了方法saveXML//6.保存(数据)到新的xml中saveXML("src\\b.xml");//调用saveXML方法}
9.3.5 需求3(保存手机收藏信息写出到xml文件)
/*** 4.保存到XML*/
public void saveXML(String path) {//1.调用OutputFormat类的createPrettyPrint()OutputFormat format = OutputFormat.createPrettyPrint();
//对获取的内容格式化一下 比如输出的 样式 以及字符集
//import org.dom4j.io.OutputFormat; 导包//2.设置字符集format.setEncoding("utf-8");//3.创建输出对象XMLWriter writer = null;
//import org.dom4j.io.XMLWriter; 导包 //4.调用对象try {writer = new XMLWriter(new FileWriter(path),format);//字节输出流 设置字符集
//XMLWriter 依赖于 FileWriter写出的 本身没有自己的写出方法//第二个 format一样的解释 XMLWriter 没有自己的格式化方法
//import java.io.FileWriter; 导包//5.输出给文件(写出数据)writer.write(doc);
//import java.io.IOException; 导包 } catch (IOException e) {e.printStackTrace();} finally {try {//6.关闭writer流对象writer.close();} catch (IOException e) {e.printStackTrace();}}}
注意点:
1.要刷新(在工程下) Refresh
2.最好全是UTF-8 或者GBK,要统一(xml文件和工程),不然会有乱码
3.java机制 先编译后运行
9.3.5 需求4(修改手机收藏信息节点)
/*** 5.修改XML(修改要把增加屏蔽掉)*/public void updateXML() {//1.获取根元素Element root = doc.getRootElement();//2.获取儿子元素的集合Iterator brandInfos = root.elementIterator();//3.定义变量idint id = 0;//4.循环遍历儿子元素集合while(brandInfos.hasNext()){Element brand = (Element)brandInfos.next();id++;brand.addAttribute("id", id+"");}saveXML("src\\c.xml");}
9.3.6 需求5(删除品牌为“苹果”的手机)
/**
* 删除节点(屏蔽掉添加和修改)
*/public void delete() {//1.获取根元素Element root = doc.getRootElement();//2.获取儿子元素的集合Iterator brandInfos =root.elementIterator();//3.遍历儿子元素集合while(brandInfos.hasNext()) {//4.获取儿子元素Element brand = (Element)brandInfos.next();if(brand.attributeValue("name").equals("苹果")) {brand.getParent().remove(brand);}//getParent() 获取父节点// 判断儿子节点的名称是苹果,则删除对应的父子节点}saveXML("src\\d.xml");//刷新本工程才能出来}
题外话:
mysql -uroot -pok
-u的含义是 ----->user用户的意思
使用root超级用户管理员的身份
-p的含义是-------->password的意思
使用ok作为本机mysql数据库的密码
虚拟机:
mysql -h 虚拟机的ip地址 -uroot -pok
----2021.8.31&9.01&9.02