2010-04-02 34 views
6

Tôi đã xem bài đăng giải quyết vấn đề này nhưng tôi vẫn không thể giải quyết được vấn đề của mình:jQuery và XML (với CDATA)

Tôi đã có XML với CDATA và khi phân tích cú pháp XML, bao gồm CDATA (mà tôi không muốn).

mẫu XML:

<mainnav> 
    <nav path="/" xmlpath="home.xml" key="footer" navigator=""> 
     <display><![CDATA[Home]]></display> 
     <title><![CDATA[Home]]></title> 
    </nav> 

    <nav path="/nav1/" xmlpath="nav1.xml" key="primary" navigator="primary" iconid="0"> 
     <display><![CDATA[Nav 1]]></display> 
     <title><![CDATA[Nav 1]]></title> 
     <overdesc><![CDATA[test nav 1]]></overdesc> 

     <sub path="/nav1/sub1/" xmlpath="nav1/sub1.xml" key="sub"> 
      <display><![CDATA[sub 1<br />of nav 1]]></display> 
      <title><![CDATA[sub 1<br />of nav 1]]></title> 
     </sub> 

    </nav> 


    <nav path="/nav1/" xmlpath="nav2.xml" key="primary" navigator="primary" iconid="1"> 
     <display><![CDATA[Nav 2]]></display> 
     <title><![CDATA[Nav 2]]></title> 
     <overdesc><![CDATA[test nav 2]]></overdesc> 

     <sub path="/nav2/sub1/" xmlpath="nabv2/sub1.xml" key="sub"> 
      <display><![CDATA[sub 1<br />of nav 2]]></display> 
      <title><![CDATA[sub 1<br />of nav2]]></title> 
     </sub> 

    </nav> 

</mainnav> 

jQuery:

$(document).ready(function(){ 
$.ajax({ 
    type: "GET", 
    url: "site_xml/config.xml", 
    //contentType: "text/xml", 
    dataType: ($.browser.msie) ? "xml" : "text/xml", 
    success: parseXML, 
    error: function(XMLHttpRequest, textStatus, errorThrown) { 
     alert(errorThrown); 
    } 
});}); 

function parseXML(xml) { 
$(xml).find('nav').each(function(){ 
    if ($(this).attr("key")=="primary") { // this is a primary nav item; 
     var title = $.trim($(this).find('title').text()); 
     alert(title); 
     $("#output").append(title); //nothing showing up in my output DIV, presumably due to the CDATA tags? 
    } 
}); 

}

Trả lời

10

Hình như có hai chil dren có tên là tiêu đề trong thẻ nav. Bạn đang nhận lại cả khi bạn làm:

$(this).find("title").text() 

Thử sử dụng:

$(this).find("title:first").text() 

Ngoài ra, loại bỏ các điều kiện:

dataType: ($.browser.msie) ? "xml" : "text/xml", 

Và chỉ cần sử dụng:

dataType: "xml", 
+0

oh cảm ơn. dataType đã thực hiện thủ thuật. d'oh! nhưng IE6 sẽ không hiển thị bất kỳ thứ gì ngay bây giờ. bất kỳ ý tưởng nào? – Pico

+0

Bạn có đang thử nghiệm địa phương này không? IE6 dường như không thích điều đó. Có lẽ vì các tiêu đề chính xác không được gửi khi chúng ở trên máy chủ web. Thử đặt tệp XML lên máy chủ web hoặc sử dụng tệp này để kiểm tra: http://digitalpadin.com/test.xml Nguồn: http://groups.google.com/group/jquery-en/browse_thread/ thread/adb2b047f3761179? pli = 1 – Sandro

+0

tất cả đều chạy trên máy chủ web. – Pico

0

OK tìm thấy phần còn thiếu trên một diễn đàn khác:

<script type="text/javascript"> thay vì: <script type="application/javascript">

1
<PRODUCTS> 
    <COD>1</COD> 
    <NAME><![CDATA[MINISYSTEM SONY VAIO]]></NAME> 
</PRODUCTS> 


     function CDATA(str){    
      var res = str.substr(9,str.length-12) 
      return res 
     } 

     CDATA($(this).find("name").text()); 
+2

Vui lòng thêm chi tiết. –

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