初学——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\":\"强哥\"}";
    }
}

 

    

posted @ 2019-06-21 15:19  Sprio丨往昔  阅读(384)  评论(0)    收藏  举报