Содержимое раздела CDATA - это просто текст, поэтому вы не можете разобрать его содержимое с помощью DOM. Вы можете либо использовать DOMParser()
для восстановления содержимого строки раздела CDATA обратно в XML и использовать методы DOM оттуда, либо использовать регулярные выражения.
Чтобы использовать последний подход, измените строку document.write()
на эту:
// Slice off 5 characters to get rid of the parent <div> and use [\s\S] to mean
// any character including newlines up until the first closing div tag
document.write('<p>' + description[b].childNodes[0].nodeValue.slice(5).match(/[\s\S]*?<\/div>/) + '</p>');
Чтобы использовать прежний подход, который в данном случае не идеален, но может быть полезен в других ситуациях, вы можете сделать это внутри цикла for:
var cdataContent = new DOMParser().parseFromString('<div xmlns="http://www.w3.org/1999/xhtml">'+description[b].childNodes[0].nodeValue+'</div>', 'text/xml').documentElement;
document.body.appendChild(cdataContent.firstChild);
... но обязательно вызовите media()
только после загрузки содержимого DOM.
И, возможно, у вас есть на то веские причины, но на основе предоставленного вами кода было бы намного проще сделать это:
for (i=1; i<description.length; i++) {
... и забудьте о a и b (то есть измените b на i)
И еще один совет: если вы создаете RSS самостоятельно, обратите внимание, что вы не сможете использовать разделы CDATA, вложенные в разделы CDATA.