You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中实现XML编码字符串解码与明文转XML编码?

在Java中处理XML编码/解码的正确类选择

嘿,这个问题我太熟啦!你要做的XML编码(明文转XML实体)和解码(XML实体转明文)操作,在Java里有几个实用的方案,我给你掰扯清楚:

一、首选方案:Apache Commons Text 的 StringEscapeUtils

这个类简直是处理各类字符串转义的“瑞士军刀”,一行代码就能搞定你的两个需求,省心又靠谱!

1. XML实体解码(把ConvertText转成ConvertText)

直接调用unescapeXml方法:

import org.apache.commons.text.StringEscapeUtils;

public class XmlDecodeDemo {
    public static void main(String[] args) {
        String xmlEncodedStr = "ConvertText";
        String plainText = StringEscapeUtils.unescapeXml(xmlEncodedStr);
        System.out.println(plainText); // 输出:ConvertText
    }
}

2. 明文转XML编码格式

用escapeXml11方法(支持XML 1.1标准,覆盖更多字符场景):

import org.apache.commons.text.StringEscapeUtils;

public class XmlEncodeDemo {
    public static void main(String[] args) {
        String plainPassword = "MySecurePassword123!";
        String xmlEncodedPassword = StringEscapeUtils.escapeXml11(plainPassword);
        // 输出会把特殊字符转成XML实体,比如感叹号会变成!,普通字符保持原样
        System.out.println(xmlEncodedPassword);
    }
}

注意:使用这个类需要先引入Apache Commons Text依赖,比如Maven项目可以在pom.xml中添加:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-text</artifactId>
    <version>1.10.0</version> <!-- 建议用最新稳定版 -->
</dependency>

二、无第三方依赖:用Java标准库实现

如果不想引入外部库,也可以用JDK自带的XML解析API来处理,不过代码会繁琐一些:

1. XML实体解码

通过解析XML文档来间接获取明文:

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 StdLibXmlDecode {
    public static String unescapeXml(String xmlEncoded) throws Exception {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        // 把编码字符串包裹在根标签里,让XML解析器能识别
        Document doc = builder.parse(new InputSource(new StringReader("<temp>" + xmlEncoded + "</temp>")));
        return doc.getDocumentElement().getTextContent();
    }

    public static void main(String[] args) throws Exception {
        String encoded = "&#67;&#111;&#110;&#118;&#101;&#114;&#116;&#84;&#101;&#120;&#116;";
        System.out.println(unescapeXml(encoded)); // 输出:ConvertText
    }
}

2. 明文转XML编码

标准库没有直接的工具方法,你要么手动遍历字符转义(容易出错,不推荐),要么用XML转换器来间接实现,但步骤比较多。这种场景下,还是优先推荐用StringEscapeUtils更高效。


总的来说,Apache Commons Text的StringEscapeUtils是最简洁高效的选择,如果必须限制在标准库内,再考虑用XML解析API的方案。

内容的提问来源于stack exchange,提问作者Confusion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:38:53