2013-05-10 3 views
4

나는 Nokogiri::XML::Element에이 모양이 있습니다Nokogiri를 사용하면 요소의 텍스트 내용을 새 태그로 어떻게 감쌀까요?

<div class="berg">This is some text!</div> 

내가 단지합니다 (노코 기리 요소입니다) 사업부에서 텍스트를 추출하면됩니다 후 그래서 새로운 태그로 텍스트를 포장 할 다음과 같습니다

<div class="berg"><span>This is some text!</span></div> 

노코 기리 .wrap 기능은 태그가 아닌 새로운 태그를 자신의 텍스트 내용을 래핑하는 것, 당신이 간 태그 내용을 포장 궁금 해서요. 건배.

편집

: 아래의 답을 가져다가 하나 개의 라인에서 매우 간단하게 이런 식으로했다 :

 tag.inner_html = "<span>#{tag.inner_html}</span>" 

답변

4

당신은 div 요소의 inner_html 설정할 수 있습니다. 다음은 작업 예입니다

html = '<div class="berg">This is some text!</div>' 
doc = Nokogiri::HTML.fragment(html) 

berg = doc.at('div.berg') # Or xpath, or whatever method you choose 

# Wrap the text in <span> 
berg.inner_html = "<span>#{berg.text}</span>" 

puts doc #=> <div class="berg"><span>This is some text!</span></div> 

중요한 부분은 <span> 요소에 추가하고 그 안에 기존 텍스트 요소를 넣어, inner_html의 사용이다.

+0

건배! 내 편집을 한 번 보시면 한 줄로 처리 할 수 ​​있습니다. – Smickie

+0

'css(). '대신'at'를 사용하십시오. – pguardiario

+0

@pguardiario 감사합니다. 업데이트 된 답변 –

3

당신은 할 것 :

doc.search('div.berg text()').wrap('<span>') 
+0

매우 흥미 롭습니다. 이 구문''div.berg text() ''에 대해 설명해 주시겠습니까? –

+0

물론, 기본적으로'/ div [@ class = "berg"]/text()'를 css로 번역 한 것입니다. 표준 CSS는 아니지만 nokogiri는 우리가 그걸 가지고 도망 갈 수있게 해줍니다. – pguardiario

+0

아니요, 제가 알기로는 서류 미비입니다. – pguardiario