Email:longsu2010 at yeah dot net

---- 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;
		}
	};

之后将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;
	};

这样在遇到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

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐