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 的转换。
-
添加 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>
-
实现代码:
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);