XML的内容
XML&JSON(8.31&9.01&9.02)XML简介:XML是跨平台的语言,它不需要安装任何环境的语言,它是所有语言所共有的,单独的语言,并且不是所有语言内部的。它是让所有语言去和xml交互 。注意:html前身是xml<></>(整体)这就是标记(标签)注意点:标签可以随便写(自定义不会报错),所以叫可扩展。==》不像Java 很严格。标记语
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方法,去读取xml
doc = 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.定义变量id
int 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
更多推荐
所有评论(0)