2014-11-27 1 views
0

나는 긁고있는 웹 사이트에 제공된 댓글 메시지의 텍스트를 다시 만들려고하지만 텍스트가 텍스트 사이에 이미지가있는 경우를 처리하는 데 문제가 있습니다. 이미지는 스마일 이모티콘입니다.Nokogiri를 사용하여 이미지 태그 앞에 몇 개의 문자가 있는지 찾는 방법은 무엇입니까?

예를 들어, 다음과 같은 코멘트는 아래의 HTML로 (이하 "고도을"척 실제 이미지입니다) 나타납니다

text text text blah blah blah :3some more text that will come directly after 

<div> 
    "text text text blah blah blah " 
    <img src="/smiley.png" width="16" height="16" alt=":3" title> 
    "some more text that will come directly after" 
</div> 
내가 할 수있는 방법이 있었다 기대했다

<img ...> 전에 문자 수 String의 메서드를 사용하여 alt 텍스트에 메시지 자체를 삽입하십시오.

누구나 다른 아이디어가 있거나 그러한 솔루션을 구현하는 방법을 알고 있습니까? 내가 DIV 요소에 inspect를 호출 할 때


, 나는 다음과 같은 얻을 : 나는이를 게시하기 전에 할 수 몰랐

[#<Nokogiri::XML::Element:0x3fda6dc527cc name="div" children=[#<Nokogiri::XML::Text:0x3fda6dc52484 "text text text blah blah blah ">, #<Nokogiri::XML::Element:0x3fda6dc523a8 name="img" attributes=[#<Nokogiri::XML::Attr:0x3fda6dc52330 name="src" value="/smiley.png">, #<Nokogiri::XML::Attr:0x3fda6dc52308 name="width" value="16">, #<Nokogiri::XML::Attr:0x3fda6dc522b8 name="height" value="16">, #<Nokogiri::XML::Attr:0x3fda6dc522a4 name="alt" value=":3">]>, #<Nokogiri::XML::Text:0x3fda6d487470 "some more text that will come directly after">]>] 

. 나는 어린이 목록/배열이 개별적으로 액세스 될 수 있다고 확신합니까?


나는이 div 요소를 문자열로 바꾸고 파싱을 사용하여 원하는 것을 얻었습니다.

누구나 좀 더 세련된 해결책이 있다면 알려주십시오! 나는 그것에 대해 더 많은 것을 배우기 위해 모두 다.

+1

무엇을 시도 했습니까? 예를 들어 그리드 내용을 가져 오는 경우 출력은 무엇입니까? – lcguida

+0

그리드 컨텐츠가 무엇인지 모르겠지만 해결책을 찾은 것 같습니다. 학습 경험을 위해 그리드 콘텐츠가 무엇인지 설명해 주시겠습니까? – intellectualtheft

+0

죄송합니다. 나는 div를 의미하고 그리드를 썼다. 실수로 정말 슬퍼. – lcguida

답변

1

나는 완전히 이해하고 있는지 확신하지 못합니다. 원래 HTML을 가져 와서 모든 이미지 태그를 대체 텍스트로 바꾸고 싶어하는 것 같습니다. 그렇다면이 작동합니다 :

> html = '<div> 
*  text text text blah blah blah 
*  <img src="/smiley.png" width="16" height="16" alt=":3" title> 
*  some more text that will come directly after 
* </div>' 

> doc = Nokogiri::HTML.fragment(html) 
> doc.css('img').each {|img| img.replace(img.attr('alt'))} 

> puts doc.at('div').text 

    text text text blah blah blah 
    :3 
    some more text that will come directly after 
+0

그게 정확히 내가 원하는 것입니다. 이것은 확실히 내가 사용하려고 계획했던 것보다 훨씬 나은 해결책입니다. 감사! – intellectualtheft

2

당신은 질문 :

어떻게 노코 기리를 사용하여 이미지 태그 앞에 와서 얼마나 많은 문자를 알아?

img = doc.at('img') 
img.previous.text.length 
관련 문제