问题描述
以前没做SAX这方面的不知道,现在仔细研究了下才发现,SAX解析是有缺陷的当我使用SAX解析器解析XHTML文件的时候,发现解析器无法正确的解析出文件当中的特殊字符,比如¡¢£¤¥我debug了一下发现在继承自DefaultHandler的类中的characters方法中没有这些字符进来,而且还有一个现象是,一个标签中的所有字符会由&所在的特殊字符分成两部分。网上有人说SAX解析中会跳过这段带有&的字符,但是为什么"----------------------------"&----------------------------&<----------------------------<>---------------------------->这几个会转化为对应的普通字符显示,那么究竟是在SAX解析其中全部替换了,还是有什么其他原因呢,我找了下关于SAX解析方面的类源码,但是还是没找到具体原因.不知道各位大虾有什么思路或者解决方法么(在解析过程中不改变XHTML文件的前提下),希望大家不吝赐教,小弟不胜感激。
解决方案
解决方案二:
没注意过这个问题.不过你可以考虑换个XMLParser试试,也许只是你现在用的这个Parser的实现问题
解决方案三:
我测试下
解决方案四:
好像Dom解析也存在这个问题,而且Dom解析也不太满足我的要求
解决方案五:
我现在的想法是找到sax解析中作替换或者是跳过这些特殊字符的方法,然后自己来重构这些方法,但是死活没有找到,有没有高手指点下啊
解决方案六:
解析的时候,总有一些特殊字符,程序中用来做控制的,比如><,",我碰到的是<>需要转换,你就用转换的<和>代替好了,如果非要深究,找找源码看看,没这个必要,...........
解决方案七:
引用5楼wula0010的回复:
解析的时候,总有一些特殊字符,程序中用来做控制的,比如><,",我碰到的是<>需要转换,你就用转换的&lt;和&gt;代替好了,如果非要深究,找找源码看看,没这个必要,...........
现在是必须支持所有的准确的说是大部分的特殊字符,大概有两百多个,但是sax里面大部分替换掉成了空串"";使得我的解析显示大有问题
解决方案八:
¥这些不是XML中的实体引用,而是HTML中预定义的252个实体引用之一。XML中的实体引用只有5个,即:<(<)、>(>)、"(")、'(')、&(&)
解决方案九:
W3CXML1.0PredefinedEntities
解决方案十:
好像Dom解析也存在这个问题,而且Dom解析也不太满足我的要求
解决方案十一:
引用8楼bao110908的回复:
W3CXML1.0PredefinedEntitieshttp://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent
这位老兄好像没看明白我的问题哦,现在用sax的话只能显示固定的几个,而其他的都被替换了,我是要将所有的特殊字符显示出来,看怎么解决
解决方案十二:
该回复于2011-03-15 13:37:23被版主删除
解决方案十三:
引用10楼muyu114的回复:
引用8楼bao110908的回复:W3CXML1.0PredefinedEntitieshttp://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent这位老兄好像没看明白我的问题哦,现在用sax的话只能显示固定的几个,而其他的都被替换了,我是要将所有的特殊字符显示出来,看怎么解决
我明白的,你说的那些没有一个XML解析器能支持的,你只能自己手工处理。
解决方案十四:
我前面也说了¥之类的是HTML的实体引用,并不是XML的,既然XML规范没有规定所以XML解析器没有理由会去支持。
解决方案十五:
自己手工处理吧哥们解析之前先把那些特殊字符用特殊标记标记上解析后在替换回来吧
解决方案:
http://blog.csdn.net/yaoweijq/archive/2010/11/09/5997153.aspx不清楚这个能否解决有点事情没有细看你的问题