首页 / 知识
在Java中剥离无效的XML字符
2023-04-17 05:10:00

Stripping Invalid XML characters in Java我有一个XML文件,它是数据库的输出。 我正在使用Java SAX解析器来解析XML并以其他格式输出它。 XML包含一些无效字符,并且解析器抛出诸如"无效Unicode字符(0x5)"之类的错误 除了逐行预处理文件并替换它们之外,是否有一种很好的方法可以去除所有这些字符? 到目前为止,我遇到了3个不同的无效字符(0x5、0x6和0x7)。 这是一个约4gb的数据库转储,我们将对其进行大量处理,因此每次我们要进行新的转储以运行预处理器时,都不得不等待额外的30分钟,这会很痛苦, 这不是我第一次遇到这个问题。
我使用Xalan
我没有亲自使用它,但是Atlassian开发了一种命令行XML清理程序,它可以满足您的需求(它主要是为JIRA而设计的,但XML是XML):
我使用了以下正则表达式,该正则表达式似乎可以对JDK6正常工作:
在JDK7中,可能对于不在BMP之外的最后一个范围使用符号
将澳大利亚出口关税的内容解析为XML文档时,我遇到类似的问题。我无法使用此处建议的解决方案,例如: 目前解决此问题的唯一方法是逐个字符地遍历源文件的整个内容,并测试每个字符是否不属于0x00到0x1F的ASCII范围。可以做到,但是我想知道是否有更好的方法将Java方法用于String类型。
编辑 示例代码(为避免混乱,我删除了一些必要的语句):
在此示例中,我删除(即替换为空字符串)不可打印的字符(范围包括0x00至0x1F)。您可以在方法#replaceAll()中更改第二个参数,以将字符替换为应用程序所需的字符串。 您的问题与XML无关:它与字符编码有关。最终的结果是,每个字符串(无论是XML还是其他形式)都由字节组成,并且您不知道这些字节代表什么字符,除非您被告知编码该字符串的字符是什么。例如,如果供应商告诉您它是UTF-8,而实际上是其他东西,那么您肯定会遇到问题。在最好的情况下,一切正常,但是某些字节会转换为"错误"字符。在最坏的情况下,您会遇到类似遇到的错误。 实际上,您的问题甚至更糟:您的字符串包含不代表任何字符编码中的字符的字节序列。没有文本处理工具,更不用说XML解析器了。这需要字节级清除。 是否有可能您的无效字符仅出现在值中,而不是标记本身,即XML在概念上符合架构,但值未得到正确清理?如果是这样,如何覆盖InputStream来创建CleansingInputStream,以将无效字符替换为XML等效字符? |
最新内容
相关内容
linux移走文件命令?
linux移走文件命令?,位置,文件,名称,软件,数据,命令,目录,文件夹,百度,环境,删除文件夹中所有文件的linux命令(清理垃圾文件的命令是什么)_百linux命令检清空文件?
linux命令检清空文件?,系统,不了,名称,环境,文件夹,命令,文件,目录,指令,终端,linux删除文件命令rm命令格式:rm[选项]文件命令功能:删除一个目录linux命令不换行输出?
linux命令不换行输出?,工作,地址,系统,情况,标准,命令,管理,网络,信息,目录,30个必知的Linux命令技巧,你都掌握了吗Linux常用的命令可以分为以linux的文件命令d?
linux的文件命令d?,地址,情况,信息,工作,工具,命令,代码,文件,目录,控制台,Linux文件系统操作命令df命令:用于显示文件系统的磁盘空间使用情况,更新文件命令linux?
更新文件命令linux?,工作,系统,地址,信息,时间,命令,目录,基础,标准,网络,linux常用命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目linux基础命令增加文件?
linux基础命令增加文件?,系统,时间,名字,文件,基础,数据,命令,名称,首次,密码,linux命令如何新建一个文件终端下键入:touch加文件名,这样就创建linux下读取文件命令?
linux下读取文件命令?,系统,工作,地址,数字,图片,信息,网络,命令,文件,一致,linux文件系统常用命令1、其中一些常用的命令包括ls、cd、pwd和mklinux输出结果命令?
linux输出结果命令?,标准,工作,系统,信息,命令,文件,百度,数字,环境,设备,linux标准输入输出在Linux系统中,文件描述符是一个与打开的文件或者Ilinux字符转换命令?
linux字符转换命令?,系统,工作,密码,信息,命令,基础,名称,软件,工具,电脑,Linux命令之sed-替换字符串1、可以这样做:方法1:sed -i s/被替换的内linux改文件夹名命令?
linux改文件夹名命令?,名字,软件,命令,文件,系统,目录,目标,文件名,源文件,选项,linux中用什么命令移修改文件夹名1、linux下使用mv命令来移动linux建文件命令格式?
linux建文件命令格式?,系统,名字,名称,时间,密码,命令,文件,文件夹,不了,数据,Linux虚拟机命令如何创建新的文件和文件夹1、首先,连接相应linux下载文件的命令linux?
下载文件的命令linux?,平台,工具,服务,密码,软件,网络,位置,代理,手机,工作,从linux服务器中下载或上传文件1、您要问的是为什么linux服务器一