小姜哥的微信

node.js xmlreader无法获取CDATA区问题修复

—- 2013-05-02 update —-

这个问题在写本博的同时已经提交给xmlreader作者,该问题作者已经修复,请直接使用npm更新。

我一不小心竟然成为xmlreader的代码贡献者,真是惭愧。

—- update end —-

之前写了一篇关于node.js解析xml的文章,写的是xmlreader这个模块的使用,原文见如下链接:

"http://blog.csdn.net/tt361/article/details/8777675"

xmlreader是对sax的进一步封装了,用起来很简单。前几天发现xmlreader是不会处理CDATA的,所以有些数据可能就获取不到(真是的过程是发现数据获取不到,之后发现xml中有CDATA,之后看了xmlreader源码发现并未处理CDATA)。

本文是介绍我如何解决这个问题,若修改后xmlreader仍不能满足你的需求,那么建议使用sax模块。

读node.js模块的一般步骤为,到模块所在目录下找到package.json,看看main配置项找到模块的入口文件。我们就到xmlreader目录下看package.json,发现入口文件为xmlreader.js。

在xmlreader.js中找到saxparser.ontext = function(){/ …… /},在其前边增加如下代码(处理CDATA)

saxparser.oncdata  =  function(cdata){
    //  add  the  function  text()  to  the  object  to  return  the  cdata  value:
    object.text  =  function(){
        return  cdata;
    }
};</pre>之后将saxparser.ontext = function(){/* …… */}的实现改为如下代码

saxparser.ontext  =  function  (text)  {
    //  add  the  function  text()  to  the  object  to  return  the  text  value:
    !object.text  ?  object.text  =  function(){
        return  text;
    }  :  null;
};</pre>

这样在遇到CDATA的时候获取文本就会返回CDATA块中的内容。

这个页面的链接为http://blog.csdn.net/tt361/article/details/8848028

这个问题的进展可以关注如下网址https://github.com/SamDecrock/node-xmlreader/issues/1

—-2013-04-25 update

补充一点xmlreader当前版本为0.2.2

推荐文章

回到顶部