首页 文章

使用jquery或javascript在cdata中解析html

提问于
浏览
11

我收到的网站Feed看起来像这样

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

我需要在html中显示cdata的全部内容 . 我正在使用jquery 1.9.1,当我使用 $(xml).find('rss content').text() 获取内容部分时,它实际上忽略了整个 <div>this tag is ignored<div> 部分 . 有没有办法使用javascript或jquery获取CDATA内的所有内容?

4 回答

  • 3

    有可能你的标记没有被jQuery解析为XML . 尝试显式调用$.parseXML()

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

    底线:

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

    来自工作代码的这段代码使用jquery加载xml,然后获取内容标记的第4次出现(包含CDATA)

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

    jQuery不是从字符串解析XML文档的最佳选择 . 最好使用浏览器的原生DOM Parser . 然后jQuery可以更好地处理解析的XML文档;否则我相信它会尝试像XML那样产生奇怪的结果 .

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

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

    编辑:根据其他答案, $.parseXML 可能是一个更好的选择,因为它应该与其他浏览器一起使用,但你必须以与上述类似的方式使用它,因为结果是XML文档而不是jQuery对象 .

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

    可以通过获取childNodes数据的第一个来检索jQuery中CDATA的文本:

    !$.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; }
    }});
    

    其中dataR是从YOUR_URL读取的,而txt包含来自CDATA的信息

相关问题