XML简介 (EXtensible Markup Language)
可扩展标记语言
- 特点
- XML与操作系统、编程语言的开发平台无关
- 实现不同系统之间的数据交换
- 作用
- 数据交互
- 配置应用程序和网站
- Ajax基石
XML标签
- XML文档内容由一系列标签元素组成
xml
<元素名 属性名="属性值">元素内容</元素名>
- 属性值用双引号包裹
- 一个元素可以有多个属性
- 属性值中不能直接包含 < " &
- 不建议使用的字符 ` >
XML编写注意事项
- 注意事项
- 所有XML元素都必须有结束标签
- XML标签对大小写敏感
- XML必须正确的嵌套
- 同级标签以缩进对齐
- 元素名称可以包含字母、数字或其他的字符
- 元素名称不能以数字或者标点符号开始
- 元素名称中不能包含空格
XML解析器
- 解析器类型
- 非验证解析器
- 检查文档格式是否良好
- 验证解析器
- 使用DTD检查文档的有效性
- 非验证解析器
XML命名空间
- XML命名空间的作用
- 解决在复杂 大型XML文件中 出现名称相同 但是含义不同的元素
XML
<?xml version="1.0" encoding="UTF-8"?>
<cameras xmlns:canon="http://www.canon"
xmlns:nikon="http://www.nikon.com">
<canon:camera prodID="P663" name="Camera傻瓜相机"/>
<nikon:camera proID="K29B3" name="Camera超级35毫米相机"/>
</cameras>
解析XML技术
- DOM
- 基于XML文档树结构的解析
- 适用于多次访问的XML文档
- 特点:比较消耗资源
- SAX
- 基于事件的解析
- 适用于大数据量的XML文档
- 特点:占用资源少,内存消耗小
- DOM4J
- 非常优秀的Java XML API
- 性能优异、功能强大
- 开放源代码
DOM解析XML
- DOM介绍
- 文档对象模型(Document Object Model)
- DOM把XML文档映射成一个倒挂的树
常用接口介绍
- DOM解析包:org.w3c.dom
常用接口 | 常用方法 | 说明 |
---|---|---|
Document:表示整个XML文档 | NodeList getElementsByTagName(String Tag) | 按文档顺序返回文档中指定标记名称的所有元素集合 |
Element createElement(String tagName) | 创建指定标记名称的元素 | |
Node:该文档树中的单个节点 | NodeList getChildNodes() | 获取该元素的所有子节点,返回节点集合 |
Element:XML文档中的一个元素 | String getTagName() | 获取元素名称 |
示例
xml
<?xml version="1.0" encoding="UTF-8" ?>
<!--根标签只能有一对儿-->
<books>
<!--在标签内可以写属性-->
<!--转义符 > > < < -->
<!--1.属性值必须要用引号包裹
2.一个元素可以有多条属性
3.尽量不要使用 < > -->
<book id="1" bookname="三体" price="12"/>
<book>
<id>1</id>
<bookname>三体</bookname>
<price>12</price>
</book>
<!--1. 所有的标签必须闭合-->
<!--2. xml的标签对大小写敏感-->
<!--3. 所有的xml标签 必须正确嵌套-->
<!--4. 同级标签需要对齐缩进-->
<!--5. 标签名称不能以数字或标点符号开始-->
</books>
练习
XML
<?xml version="1.0" encoding="UTF-8" ?>
<clothes>
<cloth range="height<165">S</cloth>
<cloth range="165>height<170">M</cloth>
<cloth range="170>height<175">L</cloth>
<cloth range="175>height<180">XL</cloth>
<cloth range="180>height">XXL</cloth>
</clothes>
java
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
public class Test01 {
public static void main(String[] args) {
//通过解析器解析XML文件
SAXReader saxReader=new SAXReader();
try {
saxReader.read("D:\\ideaworkspace\\J3071javaoop\\J3071JavaAdvanced\\src\\Learn\\Day\\Day230914\\XMLdemo\\clothes.xml");
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
增删改查
查询
java
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.Iterator;
public class Test01 {
public static void main(String[] args) {
//通过解析器解析XML文件
SAXReader saxReader=new SAXReader();
try {
//通过解析器获取文件对象 Document 文件文档
Document document = saxReader.read("D:\\ideaworkspace\\J3071javaoop\\J3071JavaAdvanced\\src\\Learn\\Day\\Day230914\\XMLdemo\\clothes.xml");
//获取根节点
Element root = document.getRootElement();
//获取根节点的迭代器
Iterator iterator = root.elementIterator();
while (iterator.hasNext()){
//获取子节点元素 获取到的是cloth标签
Element element=(Element) iterator.next();
//获取子元素节点的属性
System.out.println(element.attributeValue("range"));
//获取子元素节点的文本内容
System.out.println(element.getText());
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
java
public class Test03 {
public static void main(String[] args) {
Test02 test02=new Test02();
//test02.add();//增加
//test02.delete();//删除
test02.update();//修改
}
}
java
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
public class Test02 {
//对xml文件进行增删改查
private Document document;
/**
* 初始化
*/
public void init(){
SAXReader saxReader=new SAXReader();
try {
document= saxReader.read("D:\\ideaworkspace\\J3071javaoop\\J3071JavaAdvanced\\src\\Learn\\Day\\Day230914\\XMLdemo\\clothes.xml");
} catch (DocumentException e) {
e.printStackTrace();
}
}
/**
* 给xml文件内添加节点
*/
public void add(){
init();
//获取文档节点
Element root=document.getRootElement();
//在根节点下添加一个cloth节点
Element cloth = root.addElement("cloth");
cloth.addAttribute("id","123");
cloth.addText("今天中午吃什么");
save();
System.out.println("添加成功!!");
}
/**
* 保存文件
*/
public void save(){
//创建输出格式并设置输出编码
OutputFormat format=OutputFormat.createCompactFormat();
format.setEncoding("utf-8");
try {
XMLWriter xmlwriter=new XMLWriter(new FileWriter("D:\\ideaworkspace\\J3071javaoop\\J3071JavaAdvanced\\src\\Learn\\Day\\Day230914\\XMLdemo\\clothes.xml"));
xmlwriter.write(document);
xmlwriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 删除节点
*/
public void delete(){
init();
//获取根节点
Element root=document.getRootElement();
//获取根节点迭代器
Iterator iterator=root.elementIterator();
//遍历子节点
while (iterator.hasNext()){
//获取子节点对象
Element e=(Element) iterator.next();
if (e.getText().equals("今天中午吃什么")){
//从父节点中删除本节点
e.getParent().remove(e);
System.out.println("删除成功!!!");
}
}
save();
}
/**
* 修改
*/
public void update(){
init();
Element root=document.getRootElement();
Iterator iterator=root.elementIterator();
while (iterator.hasNext()){
Element e=(Element) iterator.next();
// attributeValue 属性值
if (e.attributeValue("id")!=null&&e.attributeValue("id").equals("123")){
e.addAttribute("price","999");//给指定节点添加属性
System.out.println("修改成功");
break;
}
}
save();
}
}
JOSN简介
- JSON(JavaScript Object Notation)
- 轻量级的文本数据交换格式
- 具有自我描述性
- 比XML传输速度快
JSON最初用来表示JavaScript中的对象
JSON相互转换
java
public class Test {
public static void main(String[] args) {
Student student=new Student();
student.setName("张三");
student.setAge(18);
student.setHobby(new String[]{"篮球", "足球", "乒乓球"});
System.out.println(student);
//对象如何转换成 Json 字符串
String str = JSONObject.toJSONString(student);
System.out.println(str);
System.out.println("Json字符串转对象-------------------------------");
//Json字符串如何转对象 解析对象
Student s1 = JSONObject.parseObject(str, Student.class);
System.out.println(s1.toString());
}
}
重写toString()方法
java
import java.util.Arrays;
public class Student {
private String name;
private Integer age;
private String[] hobby;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
@Override
public String toString() {
return "{" +
"\"name\":\"" + name + '\"' +
"\", age\":" + age +
", \"hobby\":" + Arrays.toString(hobby) +
'}';
}
}