nodejs using cheerio parsing xml returns empty CDATA

cdata, cheerio, javascript, node.js, xml

Solution

This is a known issue (related) with cheerio. It is unable to create a correct tree out of XML with `CDATA` in your case yet. I know this is a disappointing answer, it's WIP.

It is being worked on, meanwhile, you can remove `CDATA` with a Regular Expression.

arrXmlDocs[i].replace(/<!\[CDATA\[([\s\S]*?)\]\]>(?=\s*<)/gi, "$1");

Here is a link to an example jsfiddle.

While this is not an ideal solution, it should suffice until they work this issue out.

Problem

I am using cheerio in nodejs to parse some rss feeds. I am grabbing all the items putting them into an array. I am using 3 test feeds, all of them have a "description" child element for each "item" element. In one of the feeds the whole "description" is wrapped as CDATA, and I cant get its value. Here is an abbreviated code snippet ``` //Open the xml document with cheerio $ = cheerio.load(arrXmlDocs[i],{ ignoreWhitespace : true, xmlMode : true}); //Loop through every item $('item').each(function(i, xmlItem){ //array to hold each item being converted into an array var tempArray = []; //Loop through each child of <item> $(xmlItem).children().each(function(i, xmlItem){ //Get the name tempArray[$(this)[0].name] = $(this).text(); } } ``` As expected the two rss feeds that dont have CDATA give me an array like this ``` [ [ name: 'name of episode', description:'description of episode', pubdate: 'published date' ], [ name: 'name of episode', description:'description of episode', pubdate: 'published date' ] ] ``` and the feed with the CDATA description looks like this ``` [ name: 'name of episode', pubdate: 'published date' ], ``` So my question is: Why is cheerio not returning values wrapped in CDATA / how can I make it return those values.

Original source