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

Java解析XML文件和JSON转换的方法(DOM4j解析)

在Java编程中,经常需要解析XML文件或者将JSON字符串转换成Java对象。针对这个问题,我们可以使用DOM4j解析库来处理。下面是详细的使用方法:

解析XML文件

引入依赖库

首先,需要在项目中引入dom4j和jaxen这两个依赖库。在Maven项目中,可以在项目的pom.xml文件中添加以下依赖:

<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
</dependency>
<dependency>
    <groupId>jaxen</groupId>
    <artifactId>jaxen</artifactId>
    <version>1.1-beta-6</version>
</dependency>

读取XML文件

下面是一个简单的示例代码,用于读取XML文件并解析其中的内容。

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

import java.io.File;

public class ReadXMLFile {
    public static void main(String[] args) {
        File inputFile = new File("input.xml");
        SAXReader reader = new SAXReader();
        try {
            Document document = reader.read(inputFile);
            Element root = document.getRootElement();

            // 遍历根节点下的所有子节点
            for (Iterator<Element> it = root.elementIterator(); it.hasNext(); ) {
                Element element = it.next();

                // 输出节点的名称和文本内容
                System.out.println(element.getName() + ":" + element.getText());
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}

在本示例中,我们首先创建了一个File对象表示输入的XML文件。然后创建一个SAXReader对象,并使用read()方法读取XML文件并转换成一个Document对象。接着,我们获取根节点Element对象,通过遍历根节点的所有子节点,输出节点的名称和文本内容。

创建XML文件

下面是一个示例代码,用于创建XML文件并添加节点。

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class CreateXMLFile {
    public static void main(String[] args) {
        Document document = DocumentHelper.createDocument();

        Element company = document.addElement("company");
        company.addAttribute("name", "ABC Company");

        Element department = company.addElement("department");
        department.addAttribute("name", "IT Department");

        Element employee1 = department.addElement("employee");
        employee1.addAttribute("id", "1001");
        employee1.addElement("name").setText("Tom");
        employee1.addElement("age").setText("25");

        Element employee2 = department.addElement("employee");
        employee2.addAttribute("id", "1002");
        employee2.addElement("name").setText("Jerry");
        employee2.addElement("age").setText("28");

        try {
            XMLWriter writer = new XMLWriter(new FileWriter(new File("output.xml")), OutputFormat.createPrettyPrint());
            writer.write(document);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在本示例中,我们首先创建一个Document对象,然后向其添加根节点和子节点及其属性。最后,我们创建一个XMLWriter对象,将Document对象写入到一个文件中。

JSON转换

以下是一个JSON字符串:

{
    "name": "Jack",
    "age": 24,
    "sex": "male",
    "hobbies": ["reading", "swimming", "traveling"],
    "address": {
        "city": "Shanghai",
        "street": "Xujiahui Road"
    }
}

我们可以将其转换成一个Java对象,代码如下:

import com.alibaba.fastjson.JSON;

import java.util.ArrayList;
import java.util.List;

public class ConvertJSONToJava {
    public static void main(String[] args) {
        String jsonStr = "{\"name\":\"Jack\",\"age\":24,\"sex\":\"male\",\"hobbies\":[\"reading\",\"swimming\",\"traveling\"],\"address\":{\"city\":\"Shanghai\",\"street\":\"Xujiahui Road\"}}";
        User user = JSON.parseObject(jsonStr, User.class);
        System.out.println(user.getName() + "," + user.getAge() + "," + user.getSex());
        System.out.println("Hobbies:");
        List<String> hobbies = user.getHobbies();
        for (String hobby : hobbies) {
            System.out.println(hobby);
        }
        Address address = user.getAddress();
        System.out.println("Address:");
        System.out.println(address.getCity() + "," + address.getStreet());
    }
}

class User {
    private String name;
    private int age;
    private String sex;
    private List<String> hobbies = new ArrayList<>();
    private Address address;

    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 String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public List<String> getHobbies() {
        return hobbies;
    }

    public void setHobbies(List<String> hobbies) {
        this.hobbies = hobbies;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }
}

class Address {
    private String city;
    private String street;

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }
}

在本示例中,我们首先定义了一个Java类User和一个内部类Address,用于描述JSON字符串中的数据结构。然后,我们使用FastJson库的JSON.parseObject()方法将JSON字符串转换成User对象。最后,我们输出User对象的属性值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java解析xml文件和json转换的方法(DOM4j解析) - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java的Lambda表达式和Stream流的作用以及示例

    现在就为你讲解Java的Lambda表达式和Stream流的作用。 Lambda表达式的作用 Lambda表达式是Java 8引入的新特性,它可以简化代码冗长的写法,同时也可以将函数作为参数传递进去。常见的用法包括在集合中对元素进行过滤、映射、排序等操作,从而避免了繁琐的循环语句。 Lambda表达式的语法可以简单概括为: (parameter1, para…

    Java 2023年5月26日
    00
  • Spring boot异步任务原理全面分析

    Spring Boot异步任务原理全面分析 在Spring Boot中,我们经常需要执行一些耗时的操作,如果将它们放入主线程中进行,会导致响应变慢,用户体验不佳。而异步任务可以避免这种情况的出现。 什么是Spring Boot异步任务 Spring Boot异步任务是指在独立的线程中处理某些任务,将主线程从处理任务中解放出来的机制。Spring Boot提供…

    Java 2023年5月19日
    00
  • Java后端对接微信支付(小程序、APP、PC端扫码)包含查单退款

    Java后端对接微信支付攻略 1. 准备工作 在开始对接微信支付之前,我们需要准备一些材料: 商户号(mchId)和商户的API密钥(apiKey),在微信支付商户平台中获取。 在微信支付平台中创建支付应用,获取应用ID(appId)和应用密钥(appSecret)。 2. 配置微信支付参数 在项目中添加微信支付相关的配置,这个配置需要存储在项目的配置文件中…

    Java 2023年5月23日
    00
  • Java 11/JDK 11正式发布 支持期限至2026年9月(附下载)

    Java 11/JDK 11正式发布 支持期限至2026年9月(附下载)攻略 什么是Java 11/JDK 11? Java 11,也称作JDK 11 (Java Development Kit 11),是由Oracle公司于2018年9月发布的Java版本之一。JDK是一个开发环境,其中包含了Java编译器和运行时环境,可以用于开发、编译、运行Java程序…

    Java 2023年5月19日
    00
  • Java spring的三种注入方式详解流程

    Java Spring的三种注入方式详解流程 在Java Spring中,有三种常用的依赖注入方式:构造函数注入、Setter方法注入以及字段注入。下面将分别给出这三种方式的详细讲解流程。 构造函数注入 步骤一:定义一个接口 首先,我们需要定义一个接口。这个接口将会被一个实现类所实现。在这个接口中,我们可以定义一些方法,让实现类去具体实现这些方法。 publ…

    Java 2023年5月19日
    00
  • Java中session存储Users对象实现记住密码

    当我们使用Java web开发时,常使用session来存储用户的信息以便在整个会话期间使用。如果想要实现记住密码功能,则需要将用户的用户名与密码存储在session对象中,并设置session的有效时间。下面是实现过程的完整攻略。 第一步:创建一个登录页面 首先我们需要创建一个登录页面,该页面包含一个用户名和密码的输入框以及一个“记住密码”的复选框。当用户…

    Java 2023年5月20日
    00
  • Java Apache Commons报错“JexlException”的原因与解决方法

    当使用Java的Apache Commons类库时,可能会遇到“JexlException”错误。这个错误通常由以下原因之一起: 语法错误:如果表达式中存在语法错误,则可能会出现此错误。在这种情况下,需要检查表达式以决此问题。 上下文错误:如果表达式上下文不正确,则可能会出现此错误。在这种情况下,需要检查表达式上下文以决此问题。 以下是两个实例: 例1 如果…

    Java 2023年5月5日
    00
  • 手把手教你SpringBoot整合Mybatis

    当我们使用Spring Boot开发Web应用时,通常需要使用到Mybatis来操作数据库。本文将手把手教你如何在Spring Boot中整合Mybatis,包括配置Mybatis、编写Mapper接口、使用注解和XML方式进行SQL映射等。 1. 配置Mybatis 首先,我们需要在pom.xml文件中添加Mybatis和Mybatis-Spring的依赖…

    Java 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部