0
我正在嘗試構建一個基於Web的RSS閱讀器應用程序。我遇到的問題是,當我從RSS讀取XML並將其轉換爲JavaScript對象時;任何包裹在[![CDATA]]中的東西都會給我一個未定義的對象。下面是我使用的是什麼:如何正確地將XML轉換爲JS對象,同時正確包含CDATA
function XML2jsobj(node) {
var data = {};
// append a value
function Add(name, value) {
if (data[name]) {
if (data[name].constructor != Array) {
data[name] = [data[name]];
}
data[name][data[name].length] = value;
}
else {
data[name] = value;
}
};
// element attributes
var c, cn;
for (c = 0; cn = node.attributes[c]; c++) {
Add(cn.name, cn.value);
}
// child elements
for (c = 0; cn = node.childNodes[c]; c++) {
if (cn.nodeType == 1) {
if (cn.childNodes.length == 1 && cn.firstChild.nodeType == 3) {
// text value
Add(cn.nodeName, cn.firstChild.nodeValue);
}
else {
// sub-object
Add(cn.nodeName, XML2jsobj(cn));
}
}
}
return data;
}
var url = "http://rss.cnn.com/rss/cnn_world.rss";
var url1 = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%20%3D%20'"+url+"'";
function getWithJQ2(){
$.get(url1, function (data) {
console.log("data:",data);
var items = XML2jsobj(data.getElementsByTagName('channel')[0]);
responseFeed = items;
console.log("First article:",responseFeed.item[0]);
console.log("items:",items);
});
}
我使用的RSS提要http://rss.cnn.com/rss/cnn_world.rss。 如前所述,所有對象都已正確創建,但如果您注意到;標籤纏繞在CDATA上,並且在控制檯中快速查看它們顯示爲空對象。我不太確定,如果我提供了足夠的有關這個問題的信息,但是我一直堅持這一點。
在控制檯這給了我:test.js:89遺漏的類型錯誤:在XML2jsobj無法讀取空 的特性 '節點類型'(test.js :jquery.min.js:2) at Object.fireWith [jWery.min.js:2]在Object.success(test.js:9) at o(jquery.min.js:2) .min.js:4) 在XM LHttpRequest.d(jquery.min.js:4) –
Nevermind;必須添加: cn.childNodes.length == 1 && cn.firstChild.nodeType === 4)謝謝! –