2010-04-14 85 views
2

尝试解析的XML包含CDATA中的控制字符0x2。我试着用字符引用而导致CDATA来替代它看起来像:解析包含字符引用的xml

CDATA section----charcter reference----CDATA section 

现在,如果我尝试分析它,我得到一个错误消息说: org.xml.sax.SAXParseException:内容是不允许的序言。

原始的XML看起来像:

<?xml version="1.1" encoding="UTF-16"?><CELL><![CDATA[ABCD&#2;EFGH]]></CELL> 

我修改了它:

<?xml version="1.1" encoding="UTF-16"?><CELL><![CDATA[ABCD]]>&#2;<![CDATA[EFGH]]></CELL> 
+0

通过编辑您的问题发布您询问的实际XML。当你这样做时,选择XML并按下文本输入区域上方的1010按钮。 – 2010-04-14 09:31:24

回答

0

实体定义不是在CDATA节中解决,这就是为什么你原来的例子不工作。在我看来,修改的例子不起作用似乎是一个SAX解析器错误。也许SAX解析器不允许在以<?开头的XML prolog之前,但SAX解析器应该有一个不可见的字节顺序标记(BOM)。

为了帮助SAX解析器进行以下解决方案,最终可以做到这一点。即在提供解析器之前消耗BOM。您可以为此使用可标记的流,即标记流,读取BOM,如果没有BOM,则将流重置为其标记。我没有尝试,只是猜测。

顺便说一句:如果您在介绍中修复错字,您的问题会被认为更好:写“字符引用”而不是“字符引用”。我首先想到,缺少的a与你的问题有关。

+0

另请参阅:http://lachy.id.au/log/2006/09/xml-prolog – 2011-01-18 22:20:34