XML
XML(EXtensible Markup Language):可扩展标记语言。XML与操作系统、编程语言的开发平台无关,能够用于实现不同系统之间的数据交换。
XML的作用
①数据交互
②配置应用程序和网站
③Ajax基石
XML文档结构
XML文档结构:
1.声明 一般是XML文档的第一行
2.文档描述信息
声明的组成:
version:文档符合xml1.0规范
encoding:文档字符编码,默认为UTF-8
文档结构解释:
根元素:只有一个
根元素的开始标签:放在最前面
根元素的结束标签:放在最后面
标签内容在开始标签和结束标签之间
XML标签
XML文档内容由一系列标签元素组成
<元素名 属性名=“属性值”>元素内容</元素名>
注意:
属性值用双引号包裹
一个元素可以有多个属性
属性值中不能直接包含<、“、&
不建议使用的字符:‘、>
XML编写注意事项
①所有XML元素都必须有结束标签
②XML标签对大小写敏感
③XML必须正确的嵌套
④同级标签以缩进对齐
⑤元素名称可以包含字母、数字或其他的字符
⑥元素名称不能以数字或者标点符号开始
⑦元素名称中不能含空格
示例:
将表中的数据用XML文档表示出来
学生姓名 | 预计得分 | 实际得分 |
---|---|---|
王显明 | 75 | 80 |
宋佳 | 75 | 88 |
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student>
<name>王明显</name>
<guessScore>75</guessScore>
<realScore>80</realScore>
</student>
<student>
<name>宋佳</name>
<guessScore>75</guessScore>
<realScore>88</realScore>
</student>
</students>
XML解析器
解析器类型
①非验证解析器:检查文档格式是否良好
②验证解析器:使用DTD检查文档的有效性
解析XML技术
①DOM
基于XML文档树结构的解析
适用于多次访问的XML文档
特点:比较消耗资源
②SAX
基于事件的解析
适用于大数据量的XML文档
特点:占用资源少,内存消耗小
③DOM4J
非常优秀的Java XML API
性能优异、功能强大
开放源代码
DOM解析XML
**DOM:**文档对象模型(Document Object Model),DOM把XML文档映射成一个倒挂的树。
<book >
<title>三国演义</title>
<author>罗贯中</author>
<price>30元</price>
</book>
上述xml代码可表示的树为:
常用接口介绍:
常用接口 | 常用方法 | 说明 |
---|---|---|
Document:表示整个 XML 文档 | NodeList getElementsByTagName(String Tag) | 按文档顺序返回文档中指定标记名称的所有元素集合 |
Node:该文档树中的单个节点 | NodeList getChildNodes() | 获取该元素的所有子节点,返回节点集合 |
Element:XML 文档中的一个元素 | String getTagName() | 获取元素名称 |
java代码对xml文件的查看与增加
DOM解析XML文件步骤:
①创建解析器工厂对象
②解析器工厂对象创建解析器对象
③解析器对象指定XML文件创建Document对象
④以Document对象为起点操作DOM树
保存xml文件步骤:
①获得TransformerFactory对象
②创建Transformer对象
③创建DOMSource对象(包含XML信息)
④设置输出属性:编码格式
⑤创建StreamResult对象(包含保存文件的信息)
⑥将XML保存到指定文件中
直接上代码:
// 新建phone.xml
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<phoneInfo>
<brand name="华为">
<type name="p30"/>
<type name="mate30"/>
<type name="p40pro"/>
</brand>
<brand name="苹果">
<type name="iphone11p"/>
<type name="iphoneX"/>
</brand>
<brand name="三星">
<type name="note20"/>
</brand>
</phoneInfo>
public class TestXML {
public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException {
// 创建解析器工厂对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 创建解析器对象
DocumentBuilder db = dbf.newDocumentBuilder();
// 解析器对象指定XML文件创建Document对象
Document document = db.parse("phone.xml");
// 获取node列表
NodeList brand = document.getElementsByTagName("brand");
// 遍历node
for (int i = 0; i < brand.getLength(); i++) {
Node item = brand.item(i);
Element e = (Element)item;
// 获取当前节点的name属性值
System.out.println(e.getAttribute("name"));
// 获取子节点
NodeList type = e.getElementsByTagName("type");
// 遍历子节点
for (int j = 0; j < type.getLength(); j++) {
Node item1 = type.item(j);
Element e2 =(Element)item1;
// 输出type子节点的name属性值
System.out.println(e2.getAttribute("name"));
}
}
// 增加一个brand节点
// 获取根节点
Node root = document.getElementsByTagName("phoneInfo").item(0);
// 创建一个brand节点
Element sx = testXML.document.createElement("brand");
// 设置brand节点的name属性
sx.setAttribute("name","三星");
// 创建type节点
Element sxType = testXML.document.createElement("type");
// 设置type节点的name属性
sxType.setAttribute("name","note20");
// 将type节点追加到brand节点中
sx.appendChild(sxType);
// 将brand节点追加到根节点
root.appendChild(sx);
// 保存更改
// 获得TransformerFactory对象
TransformerFactory tf =TransformerFactory.newInstance();
// 设置缩进
tf.setAttribute("indent-number",4);
Transformer t =tf.newTransformer();
t.setOutputProperty(OutputKeys.INDENT,"yes");// 换行
t.setOutputProperty(OutputKeys.ENCODING,"utf-8");//标注字符编码
DOMSource source = new DOMSource(document);
// 输出流写入xml文件
FileOutputStream fos = new FileOutputStream("phone.xml");
StreamResult sr = new StreamResult(new OutputStreamWriter(fos));// 只有用writer才能缩进
t.transform(source,sr);
}
]
JSON
JSON简介
①JSON(JavaScript Object Notation)是JavaScript中的对象表示法
②轻量级的文本数据交换格式,独立于JavaScript语言
③具有自我描述性
④比XML传输速度快
JSON语法规则
①数据由名称/值对构成
②数据之间由逗号分隔
③大括号内为对象
④中括号内为数组
示例:
{
"name":"jason",
"age":20,
"skills":["Java","Hadoop","Python"]
}
java对象转为JSON
// Student类
public class Student implements Serializable {
private int id;
private String name;
private String sex;
private double score;
public Student() {
}
public Student(int id, String name, String sex, double score) {
this.id = id;
this.name = name;
this.sex = sex;
this.score = score;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", score=" + score +
'}';
}
}
// 测试类
public class TestJson {
public static void main(String[] args) {
Student s = new Student(1,"张三","男",65.5);
// java对象转为JSON字符串
String jsonString = JSON.toJSONString(s);
System.out.println(jsonString);
//JSON对象转java对象
Object o = JSON.parse(jsonString);
JSONObject jsonObject = JSON.parseObject(jsonString);
Student t = JSON.toJavaObject(jsonObject,Student.class);
System.out.println(t);
}
}