java - 读取为数字代码而不是特殊字符

标签 java xml database sax

我有一个 XML 文件可供 SAX 解析器读取、存储到 CSV 中并导入到数据库中。

在我的 XML 文件中,有一位作者的姓名为:<author>G&uuml;nther Heinemann</author> 正如您所看到的,XML 中的“ü”写为 &umml; .

所以是的,我需要将作者存储在数据库中。我无法将该字符存储为“ü”。我需要将其存储为 &umml;

但是当我使用 SAX 解析器从 XML 中读取时,它继续读取为“ü”而不是 &umml; 我怎样才能使Java存储为&umml;而不是“ü”?

谢谢

最佳答案

它可能也很慢,因为可能会读取包含包含内容的巨大 HTML DTD。 但是您需要它,因为不允许使用单个与号 (&)。 HTML DTD 定义了数百个 HTML 实体名称,例如 &perc; (%)。

DTD 可以取自 XML 目录,即该 HTML URL 的离线本地版本。然后您可以更改实体。但这工作量太大了。

我们可以做的就是在解析器中安装您自己的EntityHandler,等等。研究工作,比较轻松。

最简单的方法是将输入包装在您自己的 InputStream/Reader 中,例如使用 BufferedReader 将 & 替换为 &,这样就可以完成所需的替换。

在 XML 中:ü 而不是 ü

line = line.replace("&", "&amp;");
// Undo XML escapes:
String[] xmlTags = { "amp", "lt", "gt", "quot", "apos" };
for (String xmlTag : xmlTags) {
    line = line.replace("&amp;" + xmlTag + ";", "&" + xmlTag + ";");
}

关于java - 读取为数字代码而不是特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19332250/

相关文章:

java switch 跳转到超过 1 种情况

java - 无法读取 XMLFile,异常 : java. io.FileNotFoundException : C:\Temp\logger. dtd(系统找不到指定的文件)

java - 接口(interface)和 jaxb

mysql - 如何只显示负值,而让正值全部显示为0?

sql - 级联下拉列表,第二个下拉列表在数据库中存储错误的值

Java 7 调整 JFrame(我的 GUI)的大小 : the componentListener is not getting fired

java - 安卓/Java : how to avoid repetitive errors logs?

java - Gradle - 运行 junit 测试找不到我的 xml 文件

sql-server - sql server 2005 xml更新查询汉字

c# - 使用 C# 从 Oracle DB 返回 Int 值