问题 字符引用“&#x1F”是无效的XML字符


谁能告诉我如何解决以下XML异常?

Character reference &#x1F is an invalid XML character

我有一个带有字符&#x1F的XML文件,当我尝试解析这个XML文件时,我得到了这个例外。有什么方法可以解决这个问题吗?

我的代码部分是这样的......

File f = new File("sample.xml");
dom = db.parse(f);

我在调用函数时遇到异常 parse()。我也试过UTF8编码,并得到了同样的例外。

任何帮助深表感谢。

提前谢谢你!!!


6967
2018-05-03 12:06


起源

看看这篇文章 stackoverflow.com/questions/2579112/... - Craig
虽然你标记了你的问题 xml,我认为你的问题与你用来解析XML的编程语言有关:它是什么? Java的?请正确标记问题。也。如果您发布您获得的异常,您尝试解析的XML片段以及您正在使用的代码,这可能会有所帮助(dom = db.parse(f) 不多说:是什么 db?) - MarcoS
@perumal,虽然这个问题很老,但我特别感兴趣。您是否愿意像MarcoS所暗示的那样澄清?这对我和其他人都非常有帮助。 - Marcel


答案:


正如Michael Kay评论的那样:XML 1.1中的有效字符多于XML 1.0中的有效字符。如果XML有一个声明版本1.0的prolog,那么更改prolog可能就足够了

<?xml version="1.0" >

<?xml version="1.1" >

如果仍然存在无效字符,则必须决定如何处理它们。 Streamflyer 将减轻你的任务。


7
2018-06-29 15:08





您可以创建一个扩展FilterReader的类来跳过无效的XML字符。看到 这个链接


4
2018-05-04 06:11





XML文件无效,解析器告诉您。控制字符十进制31,十六进制0x1F,不能出现在XML源代码中。您需要查看该文件,看看发生了什么。


2
2018-05-03 12:12



你是对的。 XML文件是无效的,但它是来自服务器的响应,所以我无法编辑XML文件,而是我想编写将在解析之前逃避这种无效XML字符的代码....任何想法,请? ? - perumal
实际上,x1F在XML 1.1中有效(假设它显示为数字字符引用),因此使用1.1解析器可以提供前进的方法。但是,一般情况下,如果人们要向您发送的内容不是有效的XML,那么他们也可能根本不打算使用XML,而处理无效XML的正确解决方案始终是修复创建这些内容的程序。一定要尝试修复它,但首先尝试让供应商修复它。 - Michael Kay
@Michael:我假设实际的字节0x1f出现在源代码中。但是,如果它确实只是字符引用,那么是的,绝对,@ perumal,只需使用更好/更新的解析器。 - Ernest Friedman-Hill
或者,如果无法修复文件并且它确实包含垃圾字符,那么您可以,例如,编写一个扩展的类 FilterInputStream,覆盖了 read() 方法,丢弃或替代垃圾字符。 - Ernest Friedman-Hill
好的,谢谢你,欧内斯特...... - perumal


这是一个有效的字符实体列表。也许从xml的上下文中你可以确定它应该是什么:

http://www.i18nguy.com/markup/ncrs.html


1
2018-05-03 12:19



是的史蒂夫,我明白了,但XML文件是来自服务器的响应。我无法编辑XML,但想要做些什么来解决这个问题......我们该怎么办?任何想法? - perumal
您收到的数据无效。正如其他人所指出的那样:你可以拒绝或清理它。我看不到其他选择。 - Steve Wellens
好的史蒂夫..... - perumal