JQuery and XML (with CDATA)

I saw a message that addresses this problem, but I still can not solve my problem:

I have XML with CDATA, and when I parse XML, it includes CDATA (which I don't want).

XML example:

<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? } }); 

}

+6
jquery xml parsing cdata
source share
3 answers

It looks like there are two child names in the nav tag. You return to both when you do:

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

Try using:

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

Also remove the conditional expression:

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

And just use:

 dataType: "xml", 
+10
source share
 <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()); 
+1
source share

OK found the missing part in another forum:

<script type="text/javascript"> instead of <script type="application/javascript">

0
source share

All Articles