XML简介 (EXtensible Markup Language)

XML简介 (EXtensible Markup Language)

可扩展标记语言

  • 特点
    • XML与操作系统、编程语言的开发平台无关
    • 实现不同系统之间的数据交换
  • 作用
    • 数据交互
    • 配置应用程序和网站
    • Ajax基石

XML标签

  • XML文档内容由一系列标签元素组成
<元素名 属性名="属性值">元素内容元素名>
  • 属性值用双引号包裹
  • 一个元素可以有多个属性
  • 属性值中不能直接包含 < " &
  • 不建议使用的字符 ` >

XML编写注意事项

  • 注意事项
    • 所有XML元素都必须有结束标签
    • XML标签对大小写敏感
    • XML必须正确的嵌套
    • 同级标签以缩进对齐
    • 元素名称可以包含字母、数字或其他的字符
    • 元素名称不能以数字或者标点符号开始
    • 元素名称中不能包含空格
XML解析器
  • 解析器类型
    • 非验证解析器
      • 检查文档格式是否良好
    • 验证解析器
      • 使用DTD检查文档的有效性
XML命名空间
  • XML命名空间的作用
    • 解决在复杂 大型XML文件中 出现名称相同 但是含义不同的元素





解析XML技术
  • DOM
    • 基于XML文档树结构的解析
    • 适用于多次访问的XML文档
    • 特点:比较消耗资源
  • SAX
    • 基于事件的解析
    • 适用于大数据量的XML文档
    • 特点:占用资源少,内存消耗小
  • DOM4J
    • 非常优秀的Java XML API
    • 性能优异、功能强大
    • 开放源代码
DOM解析XML
  • DOM介绍
    • 文档对象模型(Document Object Model)
    • DOM把XML文档映射成一个倒挂的树
      XML简介 (EXtensible Markup Language)_第1张图片
常用接口介绍
  • DOM解析包:org.w3c.dom
常用接口 常用方法 说明
Document:表示整个XML文档 NodeList getElementsByTagName(String Tag) 按文档顺序返回文档中指定标记名称的所有元素集合
Element createElement(String tagName) 创建指定标记名称的元素
Node:该文档树中的单个节点 NodeList getChildNodes() 获取该元素的所有子节点,返回节点集合
Element:XML文档中的一个元素 String getTagName() 获取元素名称

示例



<books>
    
    
    
    <book id="1" bookname="三体" price="12"/>

    <book>
        <id>1id>
        <bookname>三体bookname>
        <price>12price>
    book>
    
    
    
    
    


books>

练习



    S
    M
    L
    XL
    XXL


import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;

public class Test01 {
    public static void main(String[] args) {
        //通过解析器解析XML文件
        SAXReader saxReader=new SAXReader();
        try {
            saxReader.read("D:\\ideaworkspace\\J3071javaoop\\J3071JavaAdvanced\\src\\Learn\\Day\\Day230914\\XMLdemo\\clothes.xml");
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}

增删改查

查询

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.Iterator;

public class Test01 {
    public static void main(String[] args) {
        //通过解析器解析XML文件
        SAXReader saxReader=new SAXReader();
        try {
            //通过解析器获取文件对象  Document 文件文档
            Document document = saxReader.read("D:\\ideaworkspace\\J3071javaoop\\J3071JavaAdvanced\\src\\Learn\\Day\\Day230914\\XMLdemo\\clothes.xml");
            //获取根节点
            Element root = document.getRootElement();
            //获取根节点的迭代器
            Iterator iterator = root.elementIterator();
            while (iterator.hasNext()){
                //获取子节点元素 获取到的是cloth标签
                Element element=(Element) iterator.next();
                //获取子元素节点的属性
                System.out.println(element.attributeValue("range"));
                //获取子元素节点的文本内容
                System.out.println(element.getText());
                
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}


public class Test03 {
    public static void main(String[] args) {
        Test02 test02=new Test02();
        //test02.add();//增加
        //test02.delete();//删除
        test02.update();//修改
    }
}

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;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;

public class Test02 {
    //对xml文件进行增删改查
    private  Document document;

    /**
     * 初始化
     */
    public  void init(){
        SAXReader saxReader=new SAXReader();
        try {
            document= saxReader.read("D:\\ideaworkspace\\J3071javaoop\\J3071JavaAdvanced\\src\\Learn\\Day\\Day230914\\XMLdemo\\clothes.xml");
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }

    /**
     * 给xml文件内添加节点
     */
    public  void add(){
        init();
        //获取文档节点
        Element root=document.getRootElement();
        //在根节点下添加一个cloth节点
        Element cloth = root.addElement("cloth");
        cloth.addAttribute("id","123");
        cloth.addText("今天中午吃什么");
        save();
        System.out.println("添加成功!!");
    }
    /**
     * 保存文件
     */
    public  void save(){
        //创建输出格式并设置输出编码
        OutputFormat format=OutputFormat.createCompactFormat();
        format.setEncoding("utf-8");
        try {
            XMLWriter xmlwriter=new XMLWriter(new FileWriter("D:\\ideaworkspace\\J3071javaoop\\J3071JavaAdvanced\\src\\Learn\\Day\\Day230914\\XMLdemo\\clothes.xml"));
            xmlwriter.write(document);
            xmlwriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 删除节点
     */
    public void delete(){
        init();
        //获取根节点
        Element root=document.getRootElement();
        //获取根节点迭代器
        Iterator iterator=root.elementIterator();
        //遍历子节点
        while (iterator.hasNext()){
            //获取子节点对象
            Element e=(Element) iterator.next();
            if (e.getText().equals("今天中午吃什么")){
                //从父节点中删除本节点
                e.getParent().remove(e);
                System.out.println("删除成功!!!");
            }
        }

        save();

    }

    /**
     * 修改
     */
    public void update(){
        init();
        Element root=document.getRootElement();
        Iterator iterator=root.elementIterator();
        while (iterator.hasNext()){
            Element e=(Element) iterator.next();
            // attributeValue 属性值
            if (e.attributeValue("id")!=null&&e.attributeValue("id").equals("123")){
                e.addAttribute("price","999");//给指定节点添加属性
                System.out.println("修改成功");
                break;
            }
        }
        save();

    }

}

JOSN简介

  • JSON(JavaScript Object Notation)
    • 轻量级的文本数据交换格式
    • 具有自我描述性
    • 比XML传输速度快
      JSON最初用来表示JavaScript中的对象
JSON相互转换
public class Test {
    public static void main(String[] args) {
        Student student=new Student();
        student.setName("张三");
        student.setAge(18);

        student.setHobby(new String[]{"篮球", "足球", "乒乓球"});

        
        System.out.println(student);
        //对象如何转换成 Json 字符串
        String str = JSONObject.toJSONString(student);
        System.out.println(str);
        
        System.out.println("Json字符串转对象-------------------------------");
        //Json字符串如何转对象  解析对象
        Student s1 = JSONObject.parseObject(str, Student.class);
        System.out.println(s1.toString());
    }
}

重写toString()方法

import java.util.Arrays;

public class Student {
    private String name;
    private Integer age;
    private String[] hobby;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String[] getHobby() {
        return hobby;
    }

    public void setHobby(String[] hobby) {
        this.hobby = hobby;
    }

    @Override
    public String toString() {
        return "{" +
                "\"name\":\"" + name + '\"' +
                "\", age\":" + age +
                ", \"hobby\":" + Arrays.toString(hobby) +
                '}';
    }
}

你可能感兴趣的:(java,xml,okhttp)