初学——XML、DOM4J和json的解析
一、XML简介
1.什么是XML
xml是可扩展标记语言,很多编程语言基于xml
特点 XML与操作系统、编程语言的开发平台无关 实现不同系统之间的数据交换
作用 数据交互 配置应用程序和网站 Ajax基石
2.怎么编写xml
所有元素标签都是成对出现
xml区分大小写,元素嵌套正确
元素名称可以是包含字母数字或字符,但是不能以点和数字开头,名称内不能有空格
属性值用双引号包裹 一个元素可以有多个属性 属性值中不能直接包含<、“、& 不建议使用的字符:‘、>
3.一个良好的xml文档
<books> <!--图书信息 --> <book id="bk101"> <author>王珊</author> <title>.NET高级编程</title> <description>包含C#框架和网络编程等</description> </book> <book id="bk102"> <author>李明明</author> <title>XML基础编程</title> <description>包含XML基础概念和基本作用</description> </book> </books>
二、Dom4J
1.什么是DOM4J
是非常优秀的Java XML API 性能优异、功能强大 开放源代码
dom4j常见的方法:
Document代表文档
element 代表节点
Attribute 代表属性
SAXRead 代表取读器
getRootElement():通过document对象获取该文档的根节点
Element addElement("名称"):添加特定节点 返回值是要被添加的节点
addAttribute("属性名","属性值"):为指定节点添加属性
elementIterator:子元素迭代器,返回Iterator对象
attributeValue("属性名")根据属性名获取属性值
addText:添加文本
remove():移除指定元素 属性....
getText:获取文本
2.利用代码实现Dom4J的解析xml
创建xml文档
<?xml version="1.0" encoding="GBK"?> <phones> <phone id="001"> <brand>华为</brand> <type>P30 Pro</type> <price>3800</price> <info>华为牛逼</info> </phone> <phone id="002"> <brand>OPPO</brand> <type>Find X</type> <price>3000</price> <info>美颜相机</info> </phone> <phone id="003"> <brand>小米</brand> <type>小米 Max3</type> <price>3600</price> <description>这是一款性价比很高的手机</description> </phone> </phones>
解析xml
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Iterator; 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; public class Xmldome { Document document; //文档对象 public static void main(String[] args) throws Exception { Xmldome demo=new Xmldome(); demo.getDocument(); demo.addElement(); demo.deleteElement(); demo.modityElement(); demo.getPhoneById("001"); demo.saveXML(); } //1:获取文档对象 public void getDocument() throws Exception{ //创建SAX读取器 SAXReader reader=new SAXReader(); document=reader.read(this.getClass().getResourceAsStream("/Phones.xml")); } //2:增加元素操作 public void addElement(){ //dom4j的特点:通过根节点操作其他的节点 Element root = document.getRootElement();//获取文档根元素 //增加手机节点 Element phone = root.addElement("phone"); //为phone节点绑定id属性 phone.addAttribute("id", "003"); //依次增加子节点 Element brand = phone.addElement("brand");//品牌 Element type = phone.addElement("type");//机型 Element price=phone.addElement("price"); Element description = phone.addElement("description");//描述 //设置文本值 brand.addText("小米"); type.addText("小米 Max3"); price.addText("3600"); description.addText("这是一款性价比很高的手机"); } //删除元素操作 public void deleteElement(){ Element root = document.getRootElement(); Iterator<Element> iter = root.elementIterator();//元素的迭代器 while(iter.hasNext()){ Element ele = iter.next(); if(ele.attributeValue("id").equals("002")){ //满足对应的元素属性的id值为002,则删除 root.remove(ele); break; } } } //修改元素操作 public void modityElement(){ Element root=document.getRootElement(); Iterator<Element> iter1 = root.elementIterator(); while(iter1.hasNext()){ Element element = iter1.next(); String id=element.attributeValue("id"); if(id.equals("004")){ Iterator<Element> iterator = element.elementIterator(); while(iterator.hasNext()){ Element ele = iterator.next(); if(ele.getName().equals("price")){ ele.setText("3000"); } } break; } } } //查询元素操作 根据Id查询手机信息 public void getPhoneById(String id){ Element root=document.getRootElement(); Iterator<Element> iterator = root.elementIterator(); while(iterator.hasNext()){ Element next = iterator.next(); if(next.attributeValue("id").equals(id)){ //phone Iterator<Element> subs = next.elementIterator(); //phone节点下的子节点 while(subs.hasNext()){ System.out.print(subs.next().getText()+" "); } break; } } } //保存操作 public void saveXML() throws IOException{ FileWriter fw=new FileWriter(new File("E:\\myecclipse workspace\\XMLdome\\src\\Phones.xml")); OutputFormat format=OutputFormat.createPrettyPrint(); //设置字符集 format.setEncoding("GBK"); XMLWriter writer=new XMLWriter(fw,format); writer.write(document); writer.flush(); writer.close(); fw.close(); } }
三、JSON
1.JSON简介
JSON(JavaScript Object Notation)是JavaScript中的对象表示法 轻量级的文本数据交换格式,独立于JavaScript语言 具有自我描述性 比XML传输速度快
2.JSON语法规则
数据由名称/值对构成 数据之间由逗号分隔 大括号内为对象 中括号内为数组
3.FAstJson解析JSON
创建学生类
package cn.bdqn; /** * Created by cmy on 2019/6/21. */ public class Student { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student(String name, int age) { this.name = name; this.age = age; } public Student() { } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
通过解析
package cn.dome; import com.alibaba.fastjson.JSONObject; import org.junit.Test; public class JSONTest { public static void main(String[] args) { //实例化一个学生对象 Student stu=new Student("伍老大",16); //将Java对象转换为JSON String s = JSONObject.toJSONString(stu); System.out.println(s); Student[] students=new Student[]{new Student("张三",17),new Student("李四",18)}; String s1 = JSONObject.toJSONString(students); System.out.println(s1); //将JSON字符串转换回对象 Student student = JSONObject.parseObject(s, Student.class); System.out.println(student.getName()+" "+student.getAge()); String jsonString="{\"age\":16,\"name\":\"强哥\"}"; } }

浙公网安备 33010602011771号