侧边栏壁纸
博主头像
叩钉壹刻博主等级

7分技术,3分管理,2分运气

  • 累计撰写 30 篇文章
  • 累计创建 13 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Hutool包XML解析未保留特殊字符串值(科学记数法)

鹿心肺语
2024-01-07 / 0 评论 / 0 点赞 / 64 阅读 / 4273 字

问题描述

使用Hutool 5.8.24包,将XML转化为JSON时,包含形似科学技术法的字符串会被解析成科学记数法,从而无法获得形似科学技术法的字符串。

Pom引入Hutool 5.8.24包:

<dependency>  
    <groupId>cn.hutool</groupId>  
    <artifactId>hutool-all</artifactId>  
    <version>5.8.24</version>  
</dependency>

问题还原

待XML字符串的内容如下:

<Request>
    <Desc>304000e1</Desc>
</Request>

使用Hutool 5.8.24包解析XML代码:

import cn.hutool.json.JSONObject;  
import cn.hutool.json.JSONUtil;  
import org.junit.Test;  
  
public class ApiTest {  
  
    public static String XMLStr1 = "<Request><Desc>304000e1</Desc></Request>";  
  
    @Test  
    public void XMLTesthutool() {  
        JSONObject jsonObject = JSONUtil.parseFromXml(XMLStr1);  
        JSONObject request = jsonObject.getJSONObject("Request");  
        System.out.println(jsonObject.get("Request").toString());  
        System.out.println(request.getStr("Desc").toString());  
    }

}

运行效果截图:

image-20240107120458

解决方法

方式一:使用Hutool的XML方法解析

修改Hutool解析XML代码:

@Test  
public void XMLTestHutool() {  
    // JSONObject jsonObject = JSONUtil.parseFromXml(XMLStr1);  
    /* XML.toJSONObject(XMLStr1, true); 第一个参数 -- XML字符串;第二个参数 -- 是否保持字符串格式 */   
    JSONObject jsonObject = XML.toJSONObject(XMLStr1, true);  
    JSONObject request = jsonObject.getJSONObject("Request");  
    System.out.println(jsonObject.get("Request").toString());  
    System.out.println(request.getStr("Desc"));
}
  • XML.toJSONObject():第二个参数必须要为true,才能保留字符串格式。

运行效果截图:

image-20240107160223

方式二:使用Hutool的Dom解析

使用Hutool解析XML代码:

@Test  
public void XMLTestHutool() {  
    Document document = XmlUtil.parseXml(XMLStr1);  
    String desc = document.getElementsByTagName("Desc").item(0).getTextContent();  
    System.out.println("Desc节点值:" + desc);  
}

运行效果截图:

image-20240107160654

方式三:使用原生Dom解析

使用Dom解析XML代码:

import org.junit.Test;  
import org.w3c.dom.Document;  
import org.xml.sax.InputSource;  
  
import javax.xml.parsers.DocumentBuilder;  
import javax.xml.parsers.DocumentBuilderFactory;  
import java.io.StringReader;  
  
public class ApiTest {  
  
    public static String XMLStr1 = "<Request><Desc>304000e1</Desc></Request>";  
  
    @Test  
    public void XMLTestDom() {  
        try {  
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
            DocumentBuilder builder = factory.newDocumentBuilder();  
            Document document = builder.parse(new InputSource(new StringReader(XMLStr1)));  
            document.getDocumentElement().normalize();  
  
            String desc = document.getElementsByTagName("Desc").item(0).getTextContent();  
            System.out.println("Desc节点值:" + desc);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
  
}

运行效果截图:

image-20240107120908

问题总结

  • 在数据格式转化过程中,为了要保证数据值的格式前后要一致。
0

评论区