马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
两者都用于数据传输,但在利用方面有很多区别,具体如下:
下面是具体先容
XML
(✪▽✪)曼波~~~~!接待来到XML的奥妙天下!作为JavaWeb新手,把握XML就像得到了一把打开设置之门的金钥匙~ 让曼波用超具体的指南带你飞!- [/code][align=center][img]https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvNDVhMzE1MTlmNGY1NDM1ZDljMGJhZGU5ZDlhMjc1MDMucG5n[/img][/align]
- [size=3]第①章:一个完备的XML文件示例(⊙ω⊙) [/size]
- [code]
- <?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分析(适当小文件)
- 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分析(适当大文件)
- [/code][code]
- 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注解绑定(保举★)
- [/code][code]
- @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设置文件
- [/code][code]
- <!-- 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设置
- [/code][code]
- <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
- [/code][code]
- <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依靠(◕‿◕ )
- [/code][code]
- <!-- 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声明必须在第一行
- <!-- 错误示例 -->
- <students>
- <?xml version="1.0"?> <!-- 这里会报错! -->
复制代码 - 标签必须准确嵌套
- <!-- 错误示例 -->
- <a><b></a></b> <!-- 错误嵌套 -->
复制代码 - 属性值必须加引号
- [/code]
- [code]
- <!-- 错误示例 -->
- <student id=1001> <!-- 需要id="1001" -->
复制代码 - 转义特别字符
- [/code]
- [code]
- <content>3 < 5</content> <!-- 应该用 < -->
复制代码
知识脑图总结
曼波小贴士:
固然现在JSON更盛行,但在以下情况必须用XML:
- 须要严格模式验证(XSD)
- 处置处罚遗留体系
- 须要复杂文档布局
(✪▽✪)曼波~~~~!现在你已经是个XML小能手啦!试着用JAXB写个门生管理体系吧~ 遇到标题随时召唤曼波哦!(≧ω≦)/
(✪▽✪)曼波~~~~!JSON小讲堂开课啦~ 这但是当代Web开辟的超甜小饼干哦!让曼波用最适口的方式喂给你~ 🍪
JSON完全指南(曼波甜蜜版)
第①章 JSON甜甜言法(๑>ᴗ<๑)
根本规则:
- [/code][code]
- {
- "name": "曼波",
- "age": 18,
- "isCute": true,
- "hobbies": ["coding", "吃糖"],
- "address": {
- "city": "程序城",
- "zip": "100101"
- },
- "score": null
- }
复制代码 ✨ 曼波小贴士:
- 键必须用双引号
- 字符串值用双引号
- 不支持解释(可以用特别字段代替)
第②章 Java甜蜜操纵(≧◡≦)
1. 利用Jackson分析:
- [/code][code]
- 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. 处置处罚复杂布局:
- [/code][code]
- // 解析嵌套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. 逗号地狱:
- {
- "a": 1, // ✅
- "b": 2 // ❌ 最后一个不能有逗号!
- }
复制代码 2. 日期处置处罚:
- // 需要指定日期格式
- mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm"));
复制代码 3. 特别字符:
- {
- "message": "Hello \n World! \\/" // 需要转义
- }
复制代码 第⑤章 必备甜蜜工具(✧∇✧)
Maven依靠:
- [/code][code]
- <!-- 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就像棉花糖,固然甜蜜但要鉴戒粘手哦~ 🍡
|