当前位置: 首页 > article >正文

DOM4J解析XML, 修改xml的值

1. 引入pom依赖

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

2. 解析xml, 修改xml节点的值

import org.apache.commons.io.IOUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;

public class Dom4jParseUserXmlTest { 
	
	
    //业务数据xml格式
	public static String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
            "<DATA>\n" +
            "    <HEAD>\n" +
            "        <BIZID>AD03-1713863079</BIZID>\n" +
            "        <COUNT>1</COUNT>\n" +
            "        <CONSUMER>app</CONSUMER>\n" +
            "    </HEAD>\n" +
            "    <BODY>\n" +
            "        <ITEM>\n" +
            "            <CUST_NAME>张三</CUST_NAME>\n" +
            "            <CUST_SEX>0</CUST_SEX>\n" +
            "            <CUST_MOBILE>17812345678</CUST_MOBILE>\n" +
            "        </ITEM>\n" +
            "    </BODY>\n" +
            "</DATA>";
   
    public static void main(String[] args) { 
    	
        //创建解析器对象
        SAXReader saxReader=new SAXReader();
        try { 
            InputStream inputStream = IOUtils.toInputStream(
            		new String(xml), StandardCharsets.UTF_8.name()); 
            Document document = saxReader.read(inputStream);
            Element rootElement = document.getRootElement();
            System.out.println("1.------->root:"+rootElement.getName());

            System.out.println("2.------->获取root子标签列表");
            List<Element> usersSubElementList = rootElement.elements();
            for (Element userElement : usersSubElementList) { 
   
                System.out.println("DATA标签的子标签的名字是"+ userElement.getName());
                System.out.println("3.------->获取"+ userElement.getName() +"的子标签列表");
                List<Element> userSubElementList = userElement.elements();
                
                for (Element userSubElement : userSubElementList) { 
                	 if("BIZID".equals(userSubElement.getName())) {
                         //修改节点值
                		 userSubElement.setText("111111111111111111111111111");
                	 }
                     System.out.println("标签下的子标签名为:"+userSubElement.getName());
                     System.out.println("标签下的子标签文本是:"+userSubElement.getText());
                }
            }
//            //获取users标签的第一个标签
//              Element firstUserElement = rootElement.element("user");
//            //第一个user标签的子标签password的文本内容
//              String password = firstUserElement.attributeValue("password");
//              System.out.println(password);
        } catch (DocumentException e) { 
            e.printStackTrace();
        }
    }
}

3. 换个思路, XML转json, 然后解析json

3.1 用 Jackson 库

Jackson 是一个强大的 JSON 处理库,它也支持 XML 到 JSON 的转换。

  1. 添加 Jackson 依赖(Maven):

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>2.15.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.0</version>
    </dependency>

  2. 实现代码:

    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.dataformat.xml.XmlMapper;
    
    public class XmlToJsonConverter {
    
        public static String convertXmlToJson(String xml) throws Exception {
            // 创建 XmlMapper 实例
            XmlMapper xmlMapper = new XmlMapper();
            // 将 XML 字符串解析为 JsonNode
            JsonNode node = xmlMapper.readTree(xml.getBytes());
            // 创建 ObjectMapper 实例
            ObjectMapper jsonMapper = new ObjectMapper();
            // 将 JsonNode 转换为 JSON 字符串
            return jsonMapper.writerWithDefaultPrettyPrinter().writeValueAsString(node);
        }
    
        public static void main(String[] args) {
            String xml = "<person><name>John Doe</name><age>30</age></person>";
            try {
                String json = convertXmlToJson(xml);
                System.out.println("JSON Output:\n" + json);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

输出:

{
  "person" : {
    "name" : "John Doe",
    "age" : "30"
  }
}

3.2 使用 org.json 库

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20231013</version>
</dependency>

代码

        // 示例XML字符串

        String xmlString= "<person><name>John Doe</name><age>30</age></person>";

        // 将XML转换为JSON
        JSONObject jsonObject = XML.toJSONObject(xmlString);
        String jsonString = jsonObject.toString(4); // 4是缩进空格数,用于美化输出
        System.out.println(jsonString);


http://www.kler.cn/a/590118.html

相关文章:

  • 独立部署DeepSeek 大语言模型(如 DeepSeek Coder、DeepSeek LLM)可以采用什么框架?
  • 蓝桥杯小球碰撞
  • 蓝桥杯 刷题统计
  • Appium使用文档
  • ubuntu24.04-qt5-mysql8.0
  • AI-医学影像分割方法与流程
  • 华为eNSP(Enterprise Network Simulation Platform)实战指南
  • WEB安全--SQL注入--预防SQL注入的一些方法
  • Kafka 中的偏移量是什么?它解决了哪些问题?
  • HTML 基础夯实:标签、属性与基本结构的学习进度(二)
  • 数据可视化在特征分布对比中的应用
  • DataWhale 大语言模型 - 大模型技术基础
  • 重生之我在学Vue--第13天 Vue 3 单元测试实战指南
  • C语言文件管理详解(上)
  • 在 macOS Sequoia 15.2 中启用「三指拖动」并实现快速复制的完整指南 ✨
  • DeepSeek-R1学习
  • 如何用Python IP归属地查询API追踪网络活动?
  • 一周学会Flask3 Python Web开发-SQLAlchemy查询所有数据操作-班级模块
  • Ubuntu上部署Flask+MySQL项目
  • Redis 的特点