首页 > 编程语言 > Java解析xml文件和json转换的方法(DOM4j解析)
2022
02-11

Java解析xml文件和json转换的方法(DOM4j解析)

Java解析xml的方法有四种:

  1. DOM解析
  2. SAX解析
  3. JDOM解析
  4. DOM4J解析

本次主要介绍使用DOM4j进行解析:
这里我主要使用两种方式去解析:
xml文件内容

<?xml version="1.0" encoding="utf-8"?>
<books>
	<book id="1">
		<name>金苹果</name>
		<info>锄禾日当午</info>
	</book>
	<book id="2">
		<name>银苹果</name>
		<info>苹果很幸苦</info>
	</book>
</books>

节点操作解析

public class Demo1 {
   public static void main(String[] args) throws IOException, DocumentException {
       // 获取输入流
       FileInputStream fis = new FileInputStream("javaSE/src/com/practise/xml_json/book.xml");
       // 创建xml的读取对象
       SAXReader reader = new SAXReader();
       // 读取xml文件
       Document document = reader.read(fis);
       // 获取根节点对象
       Element root = document.getRootElement();
       // 获取根节点的名字
       List<Element> books = root.elements();
       // 遍历获取第二个节点
       for (int i = 0; i < books.size(); i++) {
           Element book = books.get(i);
           System.out.println(book.attributeValue("id"));
           System.out.println(book.elementTextTrim("name"));
           System.out.println(book.elementTextTrim("info"));
           /*
               使用循环一直获取xml的内容,个人认为适合操作不知道标签的情况下操作,
               以免造成内存的浪费。
            */
           //List<Element> list = book.elements();
           //for (int j = 0; j < list.size(); j++) {
           //    System.out.println(list.get(j).getTextTrim());
           //}
       }
       fis.close();
   }
}

运行结果:

在这里插入图片描述

6. 使用XPATH进行解析

public class XpathDemo {
    /*
        /   : 表示根节点
        //  : 从发起查找的节点开始查找后代节点
        .   : 查找当前节点
        ..  : 查找父节点
        @   : 选择属性 *
              使用方式:[@属性名='值']
     */
    public static void main(String[] args) throws FileNotFoundException, DocumentException {
        FileInputStream fis = new FileInputStream("javaSE/src/com/practise/xml_json/book.xml");
        SAXReader read = new SAXReader();
        Document document = read.read(fis);
        // 通过文档对象+XPath查找所有的name节点
        List<Node> names = document.selectNodes("//name");
        for (Node name : names) {
            System.out.println(name.getName() + ":" + name.getText());
        }

        // 获取指定id的name节点
        Node node = document.selectSingleNode("//book[@id='1']//name");
        System.out.println(node.getName() + ":" + node.getText());
    }
}

Java转换json数据,在这里我推荐两个包,就是fastjson和gjson
fastjson作为alibaba的国内开源json包,也是很不错的,但是在1.2.69的版本上好像有bug,后面应该已经改善了。
gjson的作为谷歌的国外的开源ison包,也有其优势。
我主要就是说一说这两个开源包的使用

  • fastjson的使用

fastjson里面封装了一个抽象的JSON类,里面有着许多静态方法,所以我们不需要实例化对象,直接通过类名.方法名就可以调用了。

	public class FastJsonDemo {
    public static void main(String[] args) {
        // 将对象转换为json数据
        System.out.println(JSON.toJSON(new Book(1001, "水浒传", "武松打虎")));

        // 将json对象转换为Java对象,注意不要把双引号改为单引号,这里的双引号是通过了转义的得到的
        Book book = JSON.parseObject("{\"id\":1001,\"name\":\"水浒传\",\"info\":\"武松打虎\"}", Book.class);
        System.out.println(book.getName());
    }
}

运行结果:

在这里插入图片描述

-gjson的使用
gson使用起来相对于fastjson来说有点复杂.

public class JsonDemo1 {
    public static void main(String[] args) {
        // 创建gson对象
        Gson gson = new Gson();
        // 转换
        Book book = new Book(1001, "水浒传", "武松打虎");
        String s = gson.toJson(book);
        System.out.println(s);

        System.out.println(gson.fromJson(s, Book.class));
    }
}

运行结果:

在这里插入图片描述

到此这篇关于Java解析xml文件和json转换的文章就介绍到这了,更多相关java xml文件json转换内容请搜索自学编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持自学编程网!

编程技巧