当前位置:  开发笔记 > 编程语言 > 正文

在Java中剥离无效的XML字符

如何解决《在Java中剥离无效的XML字符》经验,为你挑选了3个好方法。

我有一个XML文件,它是数据库的输出.我正在使用Java SAX解析器来解析XML并以不同的格式输出它.XML包含一些无效字符,解析器抛出"无效的Unicode字符(0x5)"之类的错误

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



1> Bozho..:

我用过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> 18Rabbit..:

我没有亲自使用过这个,但是Atlassian制作了一个可以满足您需求的命令行XML清理程序(它主要是为JIRA制作的,但XML是XML):

下载atlassian-xml-cleaner-0.1.jar

打开DOS控制台或shell,找到计算机上的XML或ZIP备份文件,此处假设称为data.xml

运行:java -jar atlassian-xml-cleaner-0.1.jar data.xml> data-clean.xml

这会将data.xml的副本写入data-clean.xml,并删除无效字符.



3> ogrisel..:

我使用下面的正则表达式似乎与JDK6的预期一样:

Pattern INVALID_XML_CHARS = Pattern.compile("[^\\u0009\\u000A\\u000D\\u0020-\\uD7FF\\uE000-\\uFFFD\uD800\uDC00-\uDBFF\uDFFF]");
...
INVALID_XML_CHARS.matcher(stringToCleanup).replaceAll("");

在JDK7中,可以使用符号表示\x{10000}-\x{10FFFF}位于BMP之外的最后一个范围,而不是\uD800\uDC00-\uDBFF\uDFFF那些不易理解的符号.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有