在 Java 中去除无效的 XML 字符

2022-09-01 13:06:57

我有一个XML文件,它是数据库的输出。我正在使用Java SAX解析器来解析XML并以不同的格式输出它。XML 包含一些无效字符,并且解析器会引发错误,例如“无效的 Unicode 字符(0x5)”

除了逐行预处理文件并替换它们之外,有没有一种好方法可以去除所有这些字符?到目前为止,我遇到了3个不同的无效字符(0x5,0x6和0x7)。这是一个~4gb的数据库转储,我们将处理它很多次,所以每次我们得到一个新的转储来运行预处理器时,都必须等待额外的30分钟,这将是一个痛苦,这不是我第一次遇到这个问题。


答案 1

我用了Xalan类:org.apache.xml.utils.XMLChar

public static String stripInvalidXmlCharacters(String input) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < input.length(); i++) {
        char c = input.charAt(i);
        if (XMLChar.isValid(c)) {
            sb.append(c);
        }
    }

    return sb.toString();
}

答案 2

我个人没有使用过这个,但Atlassian制作了一个命令行XML清理器,可能适合您的需求(它主要是为JIRA制作的,但XML是XML):

下载 atlassian-xml-cleaner-0.1.jar

打开 DOS 控制台或 shell,然后在您的计算机上找到 XML 或 ZIP 备份文件,此处假定为数据.xml

Run: java -jar atlassian-xml-clean-0.1.jar data.xml > data-clean.xml

这会将数据的副本写入数据.xml.xml,并删除无效字符。


推荐