2013-02-19 28 views
11

Tôi nhận được một thức ăn chăn nuôi trang web trông như thế nàyphân tích cú pháp html bên cdata sử dụng jquery hoặc javascript

<rss...> 
    <title> some title </title> 
    <content> 
     <![CDATA[ <div>this tag is ignored<div> who took the cookie in the cookie jar!? ]]> 
    </content> 
</rss> 

tôi cần toàn bộ nội dung của cdata sẽ được hiển thị trong html. Tôi đang sử dụng jquery 1.9.1 và khi tôi nhận được phần nội dung bằng cách sử dụng $(xml).find('rss content').text(), nó thực sự bỏ qua toàn bộ phần <div>this tag is ignored<div>. Bất kỳ cách nào để có được tất cả mọi thứ bên trong CDATA bằng cách sử dụng javascript hoặc jquery?

+0

CDATA có nghĩa là ẩn dữ liệu khỏi trình phân tích cú pháp sao cho dữ liệu không được phân tích cú pháp thành DOM dưới dạng HTML. Tôi đang cố gắng hiểu tại sao html của bạn bị ẩn trong CDATA? Bạn có thể chỉ ajax nó trong? –

+0

Bạn đã thử sử dụng 'html()' thay vì 'text()'? – Stefan

Trả lời

6

Rất có thể đánh dấu của bạn không được phân tích cú pháp dưới dạng XML bởi jQuery. Hãy thử một cách rõ ràng cách gọi $.parseXML():

var contentText = $($.parseXML(xml)).find("rss content").text(); 
1

jQuery không phải là tốt nhất tại phân tích tài liệu XML từ một chuỗi. Sẽ tốt hơn nếu bạn sử dụng trình phân tích cú pháp DOM gốc của trình duyệt. Sau đó jQuery có thể làm việc với tài liệu XML được phân tích cú pháp tốt hơn nhiều; nếu không tôi tin rằng nó sẽ cố gắng làm việc với nó như XML tạo ra kết quả lạ.

$xml = $((new DOMParser).parseFromString(xml, "text/xml")); 

http://jsfiddle.net/ExplosionPIlls/2MJt9/

EDIT: dựa trên câu trả lời khác, $.parseXML có thể là một lựa chọn tốt hơn vì nó sẽ làm việc với các trình duyệt khác, nhưng bạn sẽ phải sử dụng nó trong một thời trang tương tự như trên kể từ khi kết quả là một tài liệu XML chứ không phải là một đối tượng jQuery.

$xml = $($.parseXML(xml)); 
+0

Bạn nói đúng, tôi hoàn toàn quên cuộc gọi bổ sung thành '$()' quanh '$ .parseXML()'. Tôi cập nhật câu trả lời của tôi, cảm ơn cho người đứng đầu lên :) –

3

bottomline:

xmlDoc.getElementsByTagName("content")[0].childNodes[0].nodeValue 

đoạn này từ mã làm việc sử dụng jquery để tải xml và sau đó nhận được sự xuất hiện thứ 4 của thẻ nội dung (trong đó có chứa CDATA)

var req = new AjaxRequest(); 
req.setMethod("POST"); 
... 
req.loadXMLDoc(linkString, paramString); 
var htmlContent = req.getResponse().responseXML.getElementsByTagName('content').item(3).childNodes[0].nodeValue; 
0

văn bản từ CDATA trong jQuery có thể được lấy ra bằng cách lấy dữ liệu đầu tiên của childNodes:

!$.ajax(YOUR_URL,{ 
dataType: 'xml', 
success: function (dataR, textStatus, jqXHR){ 
var rrsobj = $(dataR).find('rss'); 
if(rrsobj){ 
    desc = $(rrsobj [0]).children('content'); 
    if(desc) 
    var txt = desc[0].childNodes[0].data; } 
}}); 

nơi dữ liệuR được đọc từ YOUR_URL và txt chứa thông tin từ CDATA

Các vấn đề liên quan