各位牛人好;
       小弟最近用MSXML4.0 sax解析一个100M 大小的XML文档的时候,发现XML中的一些节点值中含有“nbsp:”,当程序执行到该节点的时候,并没有触发characters事件,而是直接停止了解析。

        XML文件结构如下: 
<?xml version="1.0" encoding="GB2312" standalone="yes"?>
<?xml-stylesheet type="text/css" href="CNAPS_DATA.css"?>
<CNAPS_DATA>
<CNAPS_BANK_DATA>
<CNAPS_BANK>
<CNAPS_BANK_BNKCODE>102536200083</CNAPS_BANK_BNKCODE>
<CNAPS_BANK_STATUS>1</CNAPS_BANK_STATUS>
<CNAPS_BANK_CATEGORY>07</CNAPS_BANK_CATEGORY>
<CNAPS_BANK_CLSCODE>102</CNAPS_BANK_CLSCODE>
<CNAPS_BANK_DRECCODE>102521009993</CNAPS_BANK_DRECCODE>
<CNAPS_BANK_NODECODE></CNAPS_BANK_NODECODE>
<CNAPS_BANK_SUPRLIST></CNAPS_BANK_SUPRLIST>
<CNAPS_BANK_PBCCODE></CNAPS_BANK_PBCCODE>
<CNAPS_BANK_CITYCODE>5362</CNAPS_BANK_CITYCODE>
<CNAPS_BANK_ACCTSTATUS></CNAPS_BANK_ACCTSTATUS>
<CNAPS_BANK_ASALTDT></CNAPS_BANK_ASALTDT>
<CNAPS_BANK_ASALTTM></CNAPS_BANK_ASALTTM>
<CNAPS_BANK_LNAME>nbsp;中国工商银行赤壁市支行营业部nbsp;</CNAPS_BANK_LNAME>
<CNAPS_BANK_SNAME>nbsp;赤壁市支行营业部nbsp;</CNAPS_BANK_SNAME>
<CNAPS_BANK_ADDR>湖北省赤壁市城西路5号</CNAPS_BANK_ADDR>
<CNAPS_BANK_POSTCODE>437300</CNAPS_BANK_POSTCODE>
<CNAPS_BANK_TEL>0175-5222078</CNAPS_BANK_TEL>
<CNAPS_BANK_EMAIL></CNAPS_BANK_EMAIL>
<CNAPS_BANK_EFFDATE>20041206</CNAPS_BANK_EFFDATE>
<CNAPS_BANK_INVDATE>29991231</CNAPS_BANK_INVDATE>
<CNAPS_BANK_ALTDATE>2004-11-30 11:03:06</CNAPS_BANK_ALTDATE>
<CNAPS_BANK_ALTTYPE>2</CNAPS_BANK_ALTTYPE>
<CNAPS_BANK_ALTISSNO>20040026</CNAPS_BANK_ALTISSNO>
<CNAPS_BANK_REMARK></CNAPS_BANK_REMARK>
</CNAPS_BANK>
</CNAPS_BANK_DATA>
</CNAPS_DATA>在<CNAPS_BANK_LNAME>节点的后面会有"nbsp;",这个表示空格,如果将其忽略,主要是在取<CNAPS_BANK_LNAME>节点值的时候并没有进入到characters事件中,而是直接停止了解析,希望牛人给出一个解决方案,不胜感激!

解决方案 »

  1.   

    谢谢你,这样不行的,这个程序是给客户用的,XML文件是他们自己的,我是不能做任何修改的,
      

  2.   

    你有没有尝试这样:调试程序到出错的位置,根据错误码判断下为什么出错,根据你的反映,只是停止解析的话,问题不是很大,应该是这个特殊符号影响到了标签的识别,看看有没有其他api可以解决
      

  3.   

    先用文本方式打开,然后清除相关的字串,再解析
    不知道行不行,如果文件大可能影响效率
    要不是就自己用正则写一个XML解析
      

  4.   

    去掉就行了,本意只是个空格,但写错了,
    实在不能去掉,就用&nbsp;来代替
      

  5.   

    用&nbsp;似乎也不行,需要
    用&#xA0;来替代。MSXML解析器并不认识nbsp这个实体。