XML与JSON

🌟XML与JSON
✨XML语言
可扩展标记语言(可扩展:可以自定义标签名称,后续写框架时会被命名空间限制)
特性:
1.XML具有平台无关性,是一门独立的标记语言
2.xml具有自我描述性
学习xml语言主要用于写配置文件
数据传输通常使用JSON,传输速度比XML快很多
✨XML文件
XML文件是保存XML数据的一种方式

🌟XML语法格式
1.自我描述(文档声明)

<?xml version = “1.0” encoding=“UTF-8”?>

2.标记名称:
自定义名称要遵循命名规范:
1)名称可以含字母,数字以及其他的字符
2)名称不能以数字或者标点符号开始
3)名称不能以字符“xml”(或者XML,Xml)开始
4)名称不能包含空格,不能包含冒号
5)名称区分大小写
如刘德华
3.一个XML文档中,必须有且仅允许有一个根标记(即最外层的标记),标记有层级称呼,中间的是子标记,最外层的是父标签,平级的是兄弟标记,标记中除了开始喝结束,还包含属性,属性内容都是一对键和值,必须由引号引住,同一个标记内的属性名之间不可以重复。
4.标记之间可以嵌套,但不能交叉
5.注释:
1)不能文档声明前面
2)注释不能嵌套注释
格式:<!— 。。。—>
6.<! [ CDATA [ 哈哈] ]>
放在CDATA里面的内容不会被解析

🌟Java解析XML
1.SAX解析:
优点:逐行加载解析,不必解析整个文档,可以立即解析加载块,节省内存,可以在某个条件得到满足时停止解析
缺点:单项解析,只读解析
2.DOM解析:一篇文章加载完才可以解析
优点:
文档在内存中加载,允许对数据和结构做出更改
访问时双向的,可以在任何时候在书中双向解析数据
3.JDOM
4.DOM4J:!重要!JDOM的一个智能分支,后续经常使用
DOM4J解析
它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath 支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项, DOM4J是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一 个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML。
目前许多开源项目中大量采用DOM4J , 例如:Hibernate

🌟🌟🌟DOM4J解析XML 🏁掌握🏁
步骤:
1.引入jar文件 dom4j.jar
2.创建一个只想XML文件的输入流
FileInputStream fis = new FileInputStream(xml文件的地址);
3.创建一个xml读取工具对象
SAXReader sr new SAXReader();
4.使用读取工具对象,读取xml文档的输入流,并得到文档对象
Document doc = sr.read(fis);
5.通过文档对象,获取xml文档中的根元素对象
Element root = doc.getRootElement();

🌟🌟🌟文档对象Document
指的是加载到内存的 整个XML文档
常用方法:
1.通过文档对象,获取XML文档中的根元素对象
Element root = doc.getRootElement();
2.添加根节点
Element root= doc.addElement(“根节点名称”);

🌟🌟🌟元素对象Element
指的是xml文档中的单个节点
常用方法:
1.获取节点名称:getName();
2.获取节点内容:getText();
3.设置节点内容:setText();
4.根据子节点的名称,获取匹配名称的第一个子节点对象:
Element element (String 子节点名称);
5.获取所有子点对象
获取所有的字节点对象
List es = root.elements();
6.获取节点的属性值
book.attributeValue(“id”); //输出这本书的属性
7.获取字节点的内容
book.elementText(“name”);
book.elementText(“info”);
8.添加子节点
book.addElement(“字节点名称”);

🌟解析本地文件案例:首先配置libs

public static void main(String[] args) throws IOException, DocumentException {
    //1.获取输入流
    FileInputStream fis = new FileInputStream("/Users/jasmine/Desktop/Java/Demo1.xml");
    //2.创建XML读取对象
    SAXReader sr = new SAXReader();
    //3.读取并得到文档对象
    Document doc = sr.read(fis);
    //4.通过文档获取根元素
    Element root = doc.getRootElement();
    //5.开始解析元素
    System.out.println(root.getName());

    //操作
    Element book = root.element(“book”);//获取子节点book对象
    Element name = book.element(“name”);//获取子节点book对象的名称
    System.out.println(name.getText());

    //循环获取
    List<Element> es = root.elements();//
    for(int i =0;i<es.size();i++) {
        Element book = es.get(i);//循环输出每一本书
        System.out.println(book.attributeValue("id"));//输出这本书的属性
        System.out.println(book.elementText("name"));//输出这本书的名称
        System.out.println(book.elementText("info"));//输出这本书的信息
        System.out.println("-----------------------------------------------");
    }
    fis.close();

}

🌟解析网络文件案例

public class Demo2 {
    public static void main(String[] args) throws IOException, DocumentException {
    String phone ="15001085805";
    //1.获取输入流
    URL url = new URL(“http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
//api.juhe 是一个免费提供查询的接口,可以查询天气,手机号码归属地等
    URLConnection conn = url.openConnection();//打开网址
    InputStream is = conn.getInputStream();
    //2.创建一个XML读取对象
        SAXReader sr = new SAXReader();
    //3.通过读取对象,读取XML数据,并返回文档对象
        Document doc = sr.read(is);
    //4.获取根节点
        Element root = doc.getRootElement();
    //5.解析内容
        String code = root.elementText("resultcode");
        if("200".equals(code)){
            Element result = root.element("result");
            String province = result.elementText("province");
            String city = result.elementText("city");
            if(province.equals(city)){
                System.out.println("手机号码归属地为:"+city);
            }else{
                System.out.println("手机号码归属地为:"+province+" "+city);
            }
        }else{
            System.out.println("请输入正确的手机号码");
        }
        Element result = root.element("result");

    }
}

🌟DOM4J-XPATH解析XML

✨使用步骤
通过Node类的两个方法,来完成查找:
(Node是 Document 与 Element 的父接口)
方法1.
//根据路径表达式,查找匹配的单个节点
Element e = selectSingleNode(“路径表达式”);

方法2.
List es = selectNodes(“路径表达式”);

✨解析案例:

public class Demo1 {
    public static void main(String[] args) throws IOException, DocumentException {
        //1.获取输入流
        FileInputStream fis = new FileInputStream("Demo1");
        //2.创建XML读取对象
        SAXReader sr = new SAXReader();
        //3.读取并得到文档对象
        Document doc = sr.read(fis);
        //4.通过文档对象+xpath,查找所有的name节点
        List<Node> names = doc.selectNodes("//book[@id='1001']//name");//
        for(int i =0;i<names.size();i++){
            System.out.println(names.get(i).getName());
            System.out.println(names.get(i).getText());
        }
        //通过文档对象XPath,查找一个name节点
        Node n = doc.selectSingleNode("//book[@id='1001']//name");
        System.out.println(n.getName()+":"+n.getText());

    }
}

🌟Java生成XML
7步骤:
1.通过文档帮助器(DocumnetHelper),创建空的文档对象
Document doc = DocumentHelper.createDocument();
2.通过文档对象,向其中添加根节点
Element root = doc.addElement(“根节点名称”);
3.通过根节点对象root,丰富我们的子节点
Element e = root.addElement(“元素名称”);
4.创建一个文件输出流,用于存储XML文件
FileOutputStream fos= new FileOutputStream(“要存储的位置”);
5.将文件输出流,转换为XML文档输出流
XMLWriter xw = new XMLWriter(fos);
6.写出文档
xw.writer(doc);
7.释放资源
xw.close();

🌟把Java对象转换成xml文件
Java语言先写一个类,创建了这个类的对象 p 后,
1.创建XStream对象:XStream可以快速将Java中的对象,转换为XML字符串
XStream x = new XStream();
2.修改某个类型生成的节点(可选,默认为 包名.类名)
x.alias(name:“person”,Person.class);
3.传入对象,开始生成
String xml = x.toXML§;
System.out.println(xml);

🌟JSON语言:{ }表示一个对象
对象里面可以放属性,还可以放数组,数组里面又可以放对象,如此嵌套循环

在这里插入图片描述
在这里插入图片描述

🌟Java 与 JSON
学习JSON主要将Java中的对象 快速的转换为JSON格式的字符串
将JSON格式的字符串,转换为Java的对象

✨Gson(谷歌)
🏁将对象转换为JSON字符串
步骤:
1.引入JAR包
2.在需要转换JSON字符串的位置编写如下代码即可
String son = new Gson().toJSON(要转换的对象);
代码示例:

public class Demo3 {
    public static void main(String[] args) {
        //1.创建Gson()
        Gson g = new Gson();
        //2.转换
        Book b = new Book("100","金苹果","种植苹果真辛苦");
        String s = g.toJson(b);
        System.out.println(s);
    }
}

🏁将对象转换为JSON字符串
步骤:
1.引入jar包
2.在需要转换Java对象的位置,编写如下代码:
对象 = new Gson().fromJson(JSON字符串,对象类型.class);
案例:

public static void main(String[] args) {
    //1.创建Gson对象
    Gson g = new Gson();
    //2.转换:{"id":"100","name":"金苹果","info":"种植苹果真辛苦"}
    Book b = g.fromJson("{\"id\":\"100\",\"name\":\"金苹果\",\"info\":\"种植苹果真辛苦\"}",Book.class);
    System.out.println(b.getId());
}

如果Json文件中含有数组,转换成Java会通过ArrayList的集合形式被打印出来。

✨FastJson(阿里)
🏁将JSON字符串转为对象

案例:

//1.转换

public class Demo3_2 {
    public static void main(String[] args) {
        //1.转换:
        Book book = JSON.parseObject({\”id\”:\”1002\”,\”info\”:\”床前明月光\”},Book.class);
        System.out.println(book.getId());
    }
}

🏁将JSON数组转换为Java集合

public class Demo3_2 {
    public static void main(String[] args) {
        //1.转换:["一二三","二三四","三四五"]
        List<String> strings = JSON.parseArray("{[\"一二三\",\"二三四\",\"三四五\"]}",String.class);
        System.out.println(strings.get(1));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值