字符参考“&#x1F”是无效的XML字符。

13

有人能告诉我如何解决以下的XML异常吗?

Character reference &#x1F is an invalid XML character

我有一个带有字符&#x1F的XML文件,当我尝试解析这个XML文件时,会出现这个异常。有没有办法解决这个问题?

我的代码部分如下...

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

在调用函数 parse() 时出现异常。我也尝试使用UTF8编码,但仍然出现了相同的异常。

非常感谢您的帮助。

提前感谢!!!


请查看此帖子https://dev59.com/S0zSa4cB1Zd3GeqPrP3G - Craig
2
虽然您在问题中标记了“xml”,但我认为您的问题与解析XML所使用的编程语言有关:它是Java吗?请适当标记问题。此外,如果您发布获取的异常、您正在尝试解析的XML片段以及您正在使用的代码(dom = db.parse(f)并没有提供太多信息:db是什么?)可能会很有帮助。 - MarcoS
@perumal,虽然这个问题很老,但对我来说非常有意义。您是否介意像MarcoS建议的那样澄清一下?这对我和其他人都会非常有帮助。 - Marcel
4个回答

9

正如Michael Kay所评论的那样:XML 1.1中的有效字符比XML 1.0更多。如果XML有一个声明版本为1.0的前言,只需更改前言即可。

<?xml version="1.0" >

to

<?xml version="1.1" >

如果还存在无效字符,您必须决定如何处理它们。使用Streamflyer可轻松完成此任务。


4
你可以创建一个扩展FilterReader的类来跳过无效的XML字符。请参见此链接

1
XML文件无效,解析器会向您发出通知。控制字符十进制31、十六进制0x1F不能出现在XML源中。您需要查看该文件并了解情况。

是的,你说得对。这个XML文件是无效的,但它是服务器的响应,所以我不能编辑XML文件,而是想编写代码来在解析前转义这种无效的XML字符... 有什么想法吗? - perumal
3
实际上,在XML 1.1中,x1F是有效的(前提是它出现为数字字符引用),因此使用1.1解析器可能会提供一种解决方法。然而,总的来说,如果人们发送给您的内容不是有效的XML,则他们最好根本不使用XML。处理无效XML的正确解决方案始终是修复创建该内容的程序。可以尝试修复它,但首先请尝试让供应商修复它。 - Michael Kay
@Michael:我假设实际的字节0x1f出现在源代码中。但如果确实只是字符引用,那么没错,@perumal,只需使用更好/更新的解析器即可。 - Ernest Friedman-Hill
如果无法修复文件且确实包含垃圾字符,则可以编写一个扩展“FilterInputStream”的类,覆盖“read()”方法,并删除或替换垃圾字符。 - Ernest Friedman-Hill

1

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接