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,不然不是。

<?xml version="1.0" encoding="UTF-8"?>

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编写注意事项

  1. 所有XML元素都必须有结束标签
  2. XML标签对大小写敏感
  3. XML必须正确的嵌套
  4. 同级标签以缩进对齐 (没有缩进是不标准的xml,但不是错的)
  5. 元素名称可以包含字母、数字或其他的字符
  6. 元素名称不能以数字或者标点符号开始
  7. 元素名称中不能含空格 (建议用英文)

7. 转义符

<     &lt;
>     &gt;

给我们看的 并不是真正的大于小于

&quot;
&apos;
&     &amp;

–》 一般是在属性值上使用

<![CDATA[     ]]>  -- 》 一般是在两个标签中间使用   (文本)

8. 案例实现
1.1 案例1:将如下衣服的尺码信息,使用XML文件保存

<?xml version="1.0" encoding="UTF-8"?>
<!-- 将如下衣服的尺码信息,使用XML文件保存 -->
<clothSize>
	<size range="height&lt;165">s</size>
	<size range="165&lt;height&lt;170">M</size>
	<size range="170&lt;height&lt;175">L</size>
	<size range="175&lt;height&lt;180">XL</size>
	<size range="180&lt;height&lt;185">XXL</size>
	<size range="height&gt;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文件
在这里插入图片描述

  1. 在工程里创建一个lib-Folder
  2. 从外部导入dom4j-1.6.1.jar包
  3. 然后右击Build Path- Add to Build Path
    生成本工程的一个引用库下的包(外部类库)
    在这里插入图片描述
  4. 创建Dem4jXMLjava文件

9.3.2 加载DOM树

  1. 写个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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐