两者都用于数据传输,但在使用方面有许多区别,具体如下:
下面是具体介绍
XML
(✪▽✪)曼波~~~~!欢迎来到XML的奇妙世界!作为JavaWeb新手,掌握XML就像获得了一把打开配置之门的金钥匙~ 让曼波用超详细的指南带你飞!

第①章:一个完整的XML文件示例(⊙ω⊙)
XML
<?xml version="1.0" encoding="UTF-8"?>
<!-- 学生信息表 -->
<students>
<student id="1001">
<name>曼波</name>
<age>18</age>
<courses>
<course>Java基础</course>
<course>Web开发</course>
</courses>
</student>
<student id="1002">
<name>小萌</name>
<age>20</age>
<courses>
<course>数据库</course>
</courses>
</student>
</students>
第②章:Java解析XML的三种姿势(✧∇✧)
方法1:DOM解析(适合小文件)
java
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("students.xml");
// 获取所有student节点
NodeList students = doc.getElementsByTagName("student");
for (int i=0; i<students.getLength(); i++) {
Element student = (Element) students.item(i);
String name = student.getElementsByTagName("name").item(0).getTextContent();
System.out.println("学生姓名:" + name);
}
方法2:SAX解析(适合大文件)
java
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean isName = false;
public void startElement(String uri, String localName,
String qName, Attributes attributes) {
if (qName.equalsIgnoreCase("name")) {
isName = true;
}
}
public void characters(char[] ch, int start, int length) {
if (isName) {
System.out.println("姓名:" + new String(ch, start, length));
isName = false;
}
}
};
saxParser.parse("students.xml", handler);
方法3:JAXB注解绑定(推荐★)
java
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class Student {
@XmlAttribute
private String id;
private String name;
private int age;
@XmlElementWrapper(name="courses")
@XmlElement(name="course")
private List<String> courses;
// 必须有无参构造器!
}
// 解析代码
JAXBContext context = JAXBContext.newInstance(Students.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Students students = (Students) unmarshaller.unmarshal(new File("students.xml"));
第③章:JavaWeb中的XML应用场景(✪ω✪)
1. Spring配置文件
XML
<!-- applicationContext.xml -->
<beans xmlns="http://www.springframework.org/schema/beans">
<bean id="userService" class="com.example.UserService">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="userDao" class="com.example.UserDaoImpl"/>
</beans>
2. Web.xml配置
XML
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee">
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
3. SOAP WebService
XML
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getUserResponse xmlns="http://example.com">
<user>
<id>1001</id>
<name>曼波</name>
</user>
</getUserResponse>
</soap:Body>
</soap:Envelope>
第④章:必备Maven依赖(◕‿◕ )
XML
<!-- JAXB (Java 11+需要) -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>4.0.0</version>
</dependency>
<!-- DOM4J (更方便的DOM操作) -->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.4</version>
</dependency>
<!-- XPath支持 -->
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.2.0</version>
</dependency>
第⑤章:常见错误避坑指南(>﹏<)
-
XML声明必须在第一行
XML<!-- 错误示例 --> <students> <?xml version="1.0"?> <!-- 这里会报错! -->
-
标签必须正确嵌套
XML<!-- 错误示例 --> <a><b></a></b> <!-- 错误嵌套 -->
-
属性值必须加引号
XML<!-- 错误示例 --> <student id=1001> <!-- 需要id="1001" -->
-
转义特殊字符
XML<content>3 < 5</content> <!-- 应该用 < -->
知识脑图总结
曼波小贴士:
虽然现在JSON更流行,但在以下情况必须用XML:
- 需要严格模式验证(XSD)
- 处理遗留系统
- 需要复杂文档结构
(✪▽✪)曼波~~~~!现在你已经是个XML小能手啦!试着用JAXB写个学生管理系统吧~ 遇到问题随时召唤曼波哦!(≧ω≦)/
(✪▽✪)曼波~~~~!JSON小课堂开课啦~ 这可是现代Web开发的超甜小饼干哦!让曼波用最可口的方式喂给你~ 🍪
JSON完全指南(曼波甜蜜版)

第①章 JSON甜蜜语法(๑>ᴗ<๑)
基本规则:
XML
{
"name": "曼波",
"age": 18,
"isCute": true,
"hobbies": ["coding", "吃糖"],
"address": {
"city": "程序城",
"zip": "100101"
},
"score": null
}
✨ 曼波小贴士:
- 键必须用双引号
- 字符串值用双引号
- 不支持注释(可以用特殊字段代替)
第②章 Java甜蜜操作(≧◡≦)
1. 使用Jackson解析:
java
ObjectMapper mapper = new ObjectMapper();
String json = """
{
"name": "曼波",
"age": 18
}""";
// 解析为对象
Student student = mapper.readValue(json, Student.class);
System.out.println(student.getName()); // 输出:曼波
// 生成JSON
String newJson = mapper.writeValueAsString(student);
2. 处理复杂结构:
java
// 解析嵌套JSON
JsonNode root = mapper.readTree(json);
String city = root.get("address").get("city").asText();
// 处理数组
List<String> hobbies = mapper.readValue(
root.get("hobbies").toString(),
new TypeReference<List<String>>(){}
);
第③章 JSON vs XML 甜蜜对决(⚡▽⚡)
特性 | JSON 🍭 | XML 🍫 |
---|---|---|
数据体积 | 小30%-50% | 冗余标签多 |
解析速度 | 快2-10倍 | DOM解析较慢 |
数组支持 | 原生支持 | 需要自定义结构 |
安全性 | 需防范eval注入 | 有XXE漏洞风险 |
工具生态 | 现代框架首选 | 企业级系统仍在使用 |
第④章 甜蜜陷阱避坑指南(>﹏<)
1. 逗号地狱:
java
{
"a": 1, // ✅
"b": 2 // ❌ 最后一个不能有逗号!
}
2. 日期处理:
java
// 需要指定日期格式
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm"));
3. 特殊字符:
java
{
"message": "Hello \n World! \\/" // 需要转义
}
第⑤章 必备甜蜜工具(✧∇✧)
Maven依赖:
XML
<!-- Jackson核心 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
<!-- GSON备用 -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
曼波小贴士:JSON在以下场景最甜蜜:
- Web API通信(80%的API使用JSON)
- 配置文件(如package.json)
- NoSQL数据库(MongoDB)
- 前后端数据交互
(✪▽✪)曼波~~~~!试着用Jackson写个学生信息转换器吧~ 遇到问题随时召唤曼波哦!(≧ω≦)/ 记得JSON就像棉花糖,虽然甜蜜但要小心粘手哦~ 🍡