Java 操作XML转JSON数据格式

这篇具有很好参考价值的文章主要介绍了Java 操作XML转JSON数据格式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java操作XML文档转为JSON数据格式

一、使用的maven依赖

		<dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.3</version>
        </dependency>

二、代码实现

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.utils.StringUtils;
import org.dom4j.*;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.*;
import java.util.*;


public class XMLParse  {

    //文件路径
    static String path = "D:\\DevelopWorkspace\\MY\\opensource-framework\\RuoYi-Vue\\doc\\DataSourceConfig.xml";

    public static void main(String[] args) throws Exception {

        //1、读取文件并转换为Document文档对象
        Document doc = new SAXReader().read(new File(path));

        //2、使用asXML()方法将DOM文档对象转换为字符串
        String s = doc.asXML();

        //3、调用自定义的方法转换为JSON数据格式
        JSONObject jsonObject = startXMLToJSON(s);

        //4、输出结果
        System.out.println(jsonObject);


    }

    /**
     * 自定义*/
    public static JSONObject startXMLToJSON(String xml){
        //1、定义JSON对象保存结果
        JSONObject result = new JSONObject();
        try {
            //2、使用DocumentHelper.parseText()转换为DOM文档对象
            Document document = DocumentHelper.parseText(xml);
            //3、获取DOM文档根节点
            Element rootElement = document.getRootElement();
            //4、调用自定义的方法转换为JSON数据格式
            parseJson(rootElement,result);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        return result;
    }

    public static void parseJson(Element element,JSONObject result){
        //1、获取子节点列表
        List<Element> elements = element.elements();
        //2、循环子节点列表获取数据
        for (Element e:elements) {
            //3、有数据则获取
            if (!e.elements().isEmpty() && !e.getText().isEmpty()){
                //4、定义另一个JSON对象保存子节点JSON数据
                JSONObject cjson = new JSONObject();
                //5、此处调用自身继续方法继续循环取值,知道遍历完所有字节点数据
                parseJson(e,cjson);
                if (!cjson.isEmpty()){
                    //6、添加到JSON对象
                    result.put(e.getName(),cjson);
                }
            }else {
                if (!e.getText().isEmpty()){
                    //6、添加到JSON对象
                    result.put(e.getName(),e.getText());
                }
            }
        }
    }
 }

Debug流程源码解析

1、SAXReader加载XML文件,创建DOM文档对象

        //1、读取文件并转换为Document文档对象
        Document doc = new SAXReader().read(new File(path));

①、调用SAXReader.read(File file)方法

阐述:
【注释意思】:从给定的文件参数中读取文档:
1、file–是要读取的文件。
2、返回:新创建的Document实例
3、抛出:DocumentException–如果在解析过程中发生错误
【执行步骤】:
1、使用new InputSource(new FileInputStream(file))获取文件输入流对象source
2、校验字符编码,此处并没有设置
3、file.getAbsolutePath()获取文件file的绝对路径
4、文件路径path不为空则统一文件路径的分隔符/
5、最后将文件输入流对象source作为参数调用read(source)方法

	Reads a Document from the given File
	Params:
	file – is the File to read from.
	Returns:
	the newly created Document instance
	Throws:
	DocumentException – if an error occurs during parsing.
	public Document read(File file) throws DocumentException {
        try {
            /*
             * We cannot convert the file to an URL because if the filename
             * contains '#' characters, there will be problems with the URL in
             * the InputSource (because a URL like
             * http://myhost.com/index#anchor is treated the same as
             * http://myhost.com/index) Thanks to Christian Oetterli
             */
             //1、使用new InputSource(new FileInputStream(file))获取文件输入流对象source
            InputSource source = new InputSource(new FileInputStream(file));
            
            //2、校验字符编码,此处并没有设置
            if (this.encoding != null) {
                source.setEncoding(this.encoding);
            }
            //3、file.getAbsolutePath()获取文件file的绝对路径
            String path = file.getAbsolutePath();

			//4、文件路径path不为空则统一文件路径的分隔符/
            if (path != null) {
                // Code taken from Ant FileUtils
                StringBuffer sb = new StringBuffer("file://");

                // add an extra slash for filesystems with drive-specifiers
                if (!path.startsWith(File.separator)) {
                    sb.append("/");
                }

                path = path.replace('\\', '/');
                sb.append(path);

                source.setSystemId(sb.toString());
            }
            
			//5、最后将文件输入流对象source作为参数调用read(source)方法
            return read(source);
        } catch (FileNotFoundException e) {
            throw new DocumentException(e.getMessage(), e);
        }
    }

②调用read(InputSource in)方法

阐述:
【注释意思】:使用SAXParams从给定的InputSource读取文档:
1、in–要读取的InputSource。
2、返回:新创建的Document实例
3、抛出:DocumentException–如果在解析过程中发生错误。

	public Document read(InputSource in) throws DocumentException {
        try {
            XMLReader reader = getXMLReader();

            reader = installXMLFilter(reader);

            EntityResolver thatEntityResolver = this.entityResolver;

            if (thatEntityResolver == null) {
                thatEntityResolver = createDefaultEntityResolver(in
                        .getSystemId());
                this.entityResolver = thatEntityResolver;
            }

            reader.setEntityResolver(thatEntityResolver);

            SAXContentHandler contentHandler = createContentHandler(reader);
            contentHandler.setEntityResolver(thatEntityResolver);
            contentHandler.setInputSource(in);

            boolean internal = isIncludeInternalDTDDeclarations();
            boolean external = isIncludeExternalDTDDeclarations();

            contentHandler.setIncludeInternalDTDDeclarations(internal);
            contentHandler.setIncludeExternalDTDDeclarations(external);
            contentHandler.setMergeAdjacentText(isMergeAdjacentText());
            contentHandler.setStripWhitespaceText(isStripWhitespaceText());
            contentHandler.setIgnoreComments(isIgnoreComments());
            reader.setContentHandler(contentHandler);

            configureReader(reader, contentHandler);

            reader.parse(in);

            return contentHandler.getDocument();
        } catch (Exception e) {
            if (e instanceof SAXParseException) {
                // e.printStackTrace();
                SAXParseException parseException = (SAXParseException) e;
                String systemId = parseException.getSystemId();

                if (systemId == null) {
                    systemId = "";
                }

                String message = "Error on line "
                        + parseException.getLineNumber() + " of document "
                        + systemId + " : " + parseException.getMessage();

                throw new DocumentException(message, e);
            } else {
                throw new DocumentException(e.getMessage(), e);
            }
        }
    }

2、Document使用asXML()方法将DOM文档对象转换为字符串,该方法继承接口Node

阐述:
【注释意思】:
asXML返回该节点的文本XML表示。
1、返回:此节点的XML表示形式
2、接口返回数据类型:String
3、接口实现类 AbstractDocument
【执行步骤】:
1、使用OutputFormat定义输出XML文件流格式
2、StringWriter作为字符串输出缓冲区
3、创建XMLWriter并输出对象
4、最后返回输出到StringWriter的字符串

/**
 * <p>
 * <code>asXML</code> returns the textual XML representation of this node.
 * </p>
 * 
 * @return the XML representation of this node
 */
String asXML();
	public String asXML() {
		//1、使用OutputFormat定义输出XML文件流格式
        OutputFormat format = new OutputFormat();
        
        //2、定义编码格式,建议使用UTF-8
        format.setEncoding(encoding);
        
        try {
        	//3、创建StringWriter作为字符串输出缓冲区
            StringWriter out = new StringWriter();
            
            //4、创建XMLWriter并输出对象
            XMLWriter writer = new XMLWriter(out, format);
            writer.write(this);
            writer.flush();
            
			//5、最后返回输出到StringWriter的字符串
            return out.toString();
        } catch (IOException e) {
            throw new RuntimeException("IOException while generating textual "
                    + "representation: " + e.getMessage());
        }
    }

2、DocumentHelper.parseText(String text)把字符串转换为DOM对象

阐述:
【注释意思】:
<code>parseText</code>将给定的文本解析为XML文档返回新创建的文档。param 1、text要解析的XML文本
2、返回一个新解析的文档
2、如果无法解析文档,则@throws DocumentException
【执行步骤】:
1、使用OutputFormat定义输出XML文件流格式
2、StringWriter作为字符串输出缓冲区
3、创建XMLWriter并输出对象
4、最后返回输出到StringWriter的字符串文章来源地址https://www.toymoban.com/news/detail-736640.html

    /**
     * <p>
     * <code>parseText</code> parses the given text as an XML document and
     * returns the newly created Document.
     * </p>
     * 
     * @param text
     *            the XML text to be parsed
     * 
     * @return a newly parsed Document
     * 
     * @throws DocumentException
     *             if the document could not be parsed
     */
    public static Document parseText(String text) throws DocumentException {
        Document result = null;
		//1、创建SAXReader
        SAXReader reader = new SAXReader();
        
		//2、换取编码格式
        String encoding = getEncoding(text);
        
		//3、使用输入流读取需要解析的字符串文本
        InputSource source = new InputSource(new StringReader(text));
        //4、设置编码格式
        source.setEncoding(encoding);
		//使用read(InputSource in)方法读取解析
        result = reader.read(source);

        // if the XML parser doesn't provide a way to retrieve the encoding,
        // specify it manually
        //如果XML解析器不提供检索编码的方法,手动指定
        if (result.getXMLEncoding() == null) {
            result.setXMLEncoding(encoding);
        }

        return result;
    }

到了这里,关于Java 操作XML转JSON数据格式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 探索多种数据格式:JSON、YAML、XML、CSV等数据格式详解与比较

    1. 数据格式介绍 数据格式是用于组织和存储数据的规范化结构,不同的数据格式适用于不同的场景。常见的数据格式包括JSON、YAML、XML、CSV等。 数据可视化 | 一个覆盖广泛主题工具的高效在线平台(amd794.com) https://amd794.com/jsonformat 2. JSON(JavaScript Object Notation) JSON是一种轻量级

    2024年04月08日
    浏览(59)
  • java xml转json

    java xml转json 技术博客 http://idea.coderyj.com/ 最近在对接海康摄像头不支持json 返回的数据是xml尝试了各种方法,所以来总结一下 1.得到xml数据 2.java 将xml转json 依赖包 上代码 ps new ByteArrayInputStream(xmlString.getBytes(\\\"UTF-8\\\")) 一定要先转换为 utf8 才可以不然会直接失败

    2024年02月10日
    浏览(35)
  • Day23_学点儿JSON_定义、数据格式、和XML比较、插件

    定义:是一种轻量级的数据交换格式 JSON是JavaScript Object Notation缩写 特点: 易于程序员阅读和编写。 易于计算机解析和生成。 其实是javascript的子集:原生javascript支持JSON JSON是一种与语言无关的数据交换的格式,作用: 1. 使用ajax进行前后台数据交换 2. 移动端与服务端的数据

    2024年04月16日
    浏览(71)
  • 使用Pydantic将Python对象转换为其他数据格式,例如JSON、XML、YAML

    更多文章:技数未来 Pydantic是一个在Python中的数据验证和解析库。它可以将Python对象转换成其他数据格式,如JSON、XML和YAML。在使用Pydantic之前,我们需要进行一些准备工作: 1. 安装Python和pip:确保你的计算机上安装了Python以及pip包管理器。 2. 创建虚拟环境(可选):建议使

    2024年02月15日
    浏览(68)
  • 【工具】java工具 xml字符串转json对象

    //json字符串

    2024年02月07日
    浏览(49)
  • 开源 SPL 助力 JAVA 处理公共数据文件(txt \csv \ json \xml \xls)

    在 JAVA 应用中经常要处理 txtcsvjsonxmlxls 这类公共格式的数据文件,直接用 JAVA 硬写会非常麻烦,通常要借助一些现成的开源包,但这些开源包也都有各自的不足。 解析库 。这种类库解决了从外部文件到内部对象的问题,比硬编码取数好写,常见的有解析 txtcsv 的 OpenCSV,

    2024年02月01日
    浏览(56)
  • UE编辑器格式化xml或json

    UE编辑器格式化XML数据,首先菜单【视图】=》【查看方式】=》【XML】,然后选中需要进行格式化的内容,点击菜单【格式】=》【重新缩进选择】  UE编辑器格式化JSON数据,首先菜单【视图】=》【查看方式】=》【JSON】,然后选中需要进行格式化的内容,点击菜单【格式】=》

    2024年02月11日
    浏览(54)
  • 常见的配置文件格式:yaml,json,xml,ini,csv等

                     目录                 1、配置文件的作用         2、什么是硬编码?         3、常见的配置文件格式 欢迎关注公众号:天天说编程 你的关注是我最大的动力!         1、配置文件的作用         为什么需要配置文件:         主要作

    2024年02月08日
    浏览(48)
  • Java实现接收xml格式数据并解析,返回xml格式数据

    需求描述:后端接受xml格式数据,解析出相应数据,并返回xml格式数据。

    2024年02月10日
    浏览(42)
  • Unity数据解析(Json、XML、CSV、二进制)

    常见的数据解析(Json、XML、CSV、二进制)

    2024年02月21日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包