如何在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 = "ConvertText"; System.out.println(unescapeXml(encoded)); // 输出:ConvertText } }
2. 明文转XML编码
标准库没有直接的工具方法,你要么手动遍历字符转义(容易出错,不推荐),要么用XML转换器来间接实现,但步骤比较多。这种场景下,还是优先推荐用StringEscapeUtils更高效。
总的来说,Apache Commons Text的StringEscapeUtils是最简洁高效的选择,如果必须限制在标准库内,再考虑用XML解析API的方案。
内容的提问来源于stack exchange,提问作者Confusion
相关产品推荐
相关产品推荐

