nodejs使用cheerio解析xml返回空CDATA

Pau*_*ton 3 javascript xml cdata node.js cheerio

我在nodejs中使用cheerio来解析一些rss feed.我抓住所有将它们放入阵列的物品.我使用3个测试源,它们都为每个"item"元素都有一个"description"子元素.在其中一个Feed中,整个"描述"被包装为CDATA,我无法获得它的价值.这是一个缩写的代码片段

//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();
    }

}
Run Code Online (Sandbox Code Playgroud)

正如所料,没有CDATA的两个RSS提供给我一个像这样的数组

[
    [
        name: 'name of episode',
        description:'description of episode',
        pubdate: 'published date'
    ],
    [
        name: 'name of episode',
        description:'description of episode',
        pubdate: 'published date'
    ]
]
Run Code Online (Sandbox Code Playgroud)

并且具有CDATA描述的Feed看起来像这样

    [
        name: 'name of episode',
        pubdate: 'published date'
    ],
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:为什么cheerio没有返回CDATA中包含的值/如何让它返回这些值.

Ben*_*aum 6

这是与cheerio 有关的已知问题(相关).CDATA在您的情况下,它无法使用XML创建正确的树.我知道这是一个令人失望的答案,它是WIP.

它正在进行中,同时,您可以CDATA使用正则表达式删除.

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

这是一个示例jsfiddle的链接.

虽然这不是一个理想的解决方案,但它应该足以解决这个问题.