2011-09-19 5 views
0

XML 피드를 구문 분석하는 데 문제가 있습니다. 다음 코드는 XML 피드를 구문 분석하고 뉴스 데이터로 페이지를 채 웁니다. 내가 가진 문제는 설명 노드가 HTML로 인코딩되어 있고 그 안에 포함 된 img 태그의 src를 제거해야한다는 것입니다. 단 하나의 이미지 태그가 각 설명 노드 내에 포함되어 있습니다.Jquery - html로 인코딩 된 문자열에서 src 데이터 빼기

정규 표현식에 대한 지식이 제한되어 있지만 src 코드를 제거하기 위해 필터 방식을 사용하려고했지만 아래 예제는 작동하지 않습니다.

나는 이걸 가지고 내 머리카락을 끌어낼 때 도움이된다면 감사하겠습니다! 여기

$(xml).find("item").each(function() { 
    var i = $(xml).find("item").index(this); 

    var imgStripSrc = $('item:eq(1) description', xml).filter(function() { 
     return /(?: src=")(.+)(?:")/ 
    }) 

    if (i < 1) { 
     var newsTitleOne = $('item:eq(0) title', xml).text(); 
     if (newsTitleOne.length > 40) { 
      newsTitleOne = newsTitleOne.substring(0, 30) + ".."; 
     } 
     $(".newsIOne .newsText .t").empty(); 
     $(".newsIOne .newsText .t").append(newsTitleOne); 
    } else { 
     var newsTitleGen = $('item:eq(' + i + ') title', xml).text(); 
     if (newsTitleGen.length > 80) { 
      newsTitleGen = newsTitleGen.substring(0, 74) + ".."; 
     } 
     var newsTitleLinkHid = $('item:eq(' + i + ') link', xml).text(); 
     var newsRow = $('<div class="newsRow"><a href="' + newsTitleLinkHid + '" target="_blank">' + newsTitleGen + '</a><img src=' + imgStripSrc + '/></div>'); 
     $(".newsRows").prepend(newsRow); 
    } 
}); 

XML 예제 - http://fb.mobilechilli.com/chilli_news_reviews/NewsReviews%20Build/tstXML.xml

+0

처리중인 XML의 샘플도 게시하십시오. – Tomalak

+0

귀하의 게시물이나 pastebin.com에 해당 XML을 첨부 할 수 있습니까? –

+0

확실 - XML ​​항목 예 - http://fb.mobilechilli.com/chilli_news_reviews/NewsReviews%20Build/tstXML.xml – Dancer

답변

1

당신은 JQuery와 HTML 문자열에서 DOM을 구축 할 수 있으므로 모든에서 정규 표현식에 바이올린 할 필요가 없다는 사실을 이용하실 수 있습니다. 당신이 그 $('item:eq(' + i + ') title', xml) 주위에 저글링 필요가 없습니다 each()의 몸에, 그래서

$(".newsIOne .newsText .t").empty(); 
$(xml).find("item").each(function(i) { 
    var html  = $($("description", this).text()), 
     imgsrc = $("img:first", html).attr("src"), 
     title = $("title", this).text(), 
     link  = $("link", this).text(), 
     ellipsis = String.fromCharCode(8230); 

    if (i == 0) { 
     if (title.length > 40) { 
      title = $.trim(title.substring(0, 30)) + ellipsis; 
     } 
     $(".newsIOne .newsText .t").text(title); 
    } else { 
     if (title.length > 80) { 
      title = $.trim(title.substring(0, 74)) + ellipsis; 
     } 
     $(".newsRows").prepend(
      $('<div class="newsRow">') 
      .append("<a>", {target: "_blank", href: link, text: title}); 
      .append("<img>", {src: imgsrc}); 
     ); 
    } 
}); 

노트

  • this 항상 당신이 작업하고있는 현재 요소를 의미한다 : 당신의 코드를 다시 썼다.
  • $(description, this).text()은 HTML 문자열을 가져 와서 다른 것으로 바꿉니다. $()은 DOM 문자열을 만듭니다. 당신은 그것을 찾을 수 있습니다. <img>
  • 실제 줄임표 문자 ("…")가 있습니다.
  • 당신 자신의 위험에서 연결된 문자열로부터 HTML을 빌드하십시오. 필자는 jQuery에 내장 된 편리한 헬퍼 함수를 ​​사용했습니다.
  • 루프 인덱스는 each()에서 인수로 전달되며 직접 찾거나 계산할 필요가 없습니다.
+0

완벽합니다. 도움 주셔서 대단히 감사합니다. – Dancer