2010-12-15 180 views
4

我有一个Android应用程序,它使用SAX解析器从XML文件中提取数据。某些数据在某些CDATA标签中找到,有时包含换行符。这些换行符在解析过程中被删除。我如何保存它们?Android SAX解析:如何从CDATA标记中保留换行符

顺便说一句,我想我找到了答案here,但放置“& #xA;”在CDATA标签内只会导致获得“& #xA;”当我解析它。

有没有人有任何建议?

谢谢。

+0

你可以看到这个话题: http://stackoverflow.com/questions/3401111/preserve-newlines-when-parsing-xml/14071260#14071260 – 2012-12-28 14:51:01

回答

2

换行符不会被解析器删除,无论它们是常规字符还是CDATA节中。但是在这两种情况下,各种换行符(Unix,Windows,Mac)都被标准化为单字符规范(“unix”,\ n)换行符。没有办法阻止这种规范化的发生,除了像使用字符实体一样被建议;而这不能在CDATA部分完成,因为在那里禁用了实体处理。

但为什么你要防止这种规范化?如果你想要显示,你可以用你想要的任何本地换行符替换\ n(\ r代表mac,或者\ r \ n代替windows)。

+0

谢谢你,StaxMan。但是,在分析过程中确实会删除“\ n”字符。我知道他们不应该被删除,但他们是。那就是问题所在。是否需要设置某种属性来防止这种情况发生? – mahdaeng 2010-12-15 20:19:45

+0

Android使用哪些SAX解析器?如果真的发生了,这听起来像是一个要报告的错误。我没有意识到任何属性可以在我使用的任何解析器(Xerces,Woodstox)上删除它们,并且启用此类设置会很奇怪。 但是你确定他们被删除,还是只是将文本输出到控制台?也许控制台不显示换行符?或者,如果将其包含在网页上,则HTML会整理所有空白区域。我在问,因为我遇到过这种问题。 – StaxMan 2010-12-16 17:55:41

+0

谢谢,StaxMan。我不确定使用哪个SAX解析器。你可能是对的 - 它可能是一个应该报告的错误。我决定以不同的方式解决这个问题。我不会使用CDATA标签,然后用相应的标记替换所有可能存在问题的字符(例如,将“<”替换为“<”)。这将消除我对CDATA标签的需求,并允许我为换行使用“ ”解决方案。谢谢你的建议。 – mahdaeng 2010-12-17 15:08:47