欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > DOM4J解析XML, 修改xml的值

DOM4J解析XML, 修改xml的值

2025/3/17 7:32:45 来源:https://blog.csdn.net/kaige8312/article/details/146239205  浏览:    关键词: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 字符串解析为 JsonNodeJsonNode 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转换为JSONJSONObject jsonObject = XML.toJSONObject(xmlString);String jsonString = jsonObject.toString(4); // 4是缩进空格数,用于美化输出System.out.println(jsonString);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词