2017-02-04 1 views
-1

HTML 노드에서 X를 제외한 모든 아이를 선택하는 방법 텍스트 :내가 추출 할 필요가있는 HTML의 블록을

'TEXT'는 span class="c00" 내에서 HTML 태그와 텍스트 노드는
<div class="comment"> 
    <span class="c00"> 
    TEXT 
    <p>text</p> 
    <p>text</p> 
    <div class="reply">reply</div> 
    </span> 
</div> 

하는 것으로 .

을 제외한 모든 텍스트는div class="reply"없이 어떻게 선택합니까?

은 내가 :not 운영자 시도 :

.c00:not(.reply) 

을하지만, 작동하지 않았다.

+1

블록 레벨 요소 ('p'와'div')를'span' 안에 넣는 것은 [일반적으로 눈살을 찌푸리게됩니다.] (https://www.w3.org/TR/html401) /struct/global.html#h-7.5.3) 마크 업을 변경할 수 있는지 여부를 고려해야합니다. 마크 업을 변경할 수 있는지 여부를 고려해야합니다. 태그를 사용하면 쉽게 불량 텍스트 노드를 쉽게 선택할 수 있습니다. – Dre

+0

그게 내가 지금까지 수집 한 것입니다. 나는 이것을 근근이 살아가고있는 웹 사이트의 일부로 작업하고 있습니다. 위의 코드는 우리가 긁어 모으고있는 사이트에서 온 것입니다. – artze

+2

@Dre : "일반적으로 frowned-upon"그것은 그것을 아주 온화하게 나타냅니다. – BoltClock

답변

0

수없는 것처럼 보입니다. 그냥 .reply 그것을 .c00 스타일을 설정하고 덮어 쓰기 :

.c00 { 
 
    color: #F00; 
 
    font-weight: 700; 
 
    font-style: italic; 
 
} 
 
.reply { 
 
    color: #000; 
 
    font-weight: 400; 
 
    font-style: normal; 
 
}
<div class="comment"> 
 
    <span class="c00"> 
 
    TEXT 
 
    <p>text</p> 
 
    <p>text</p> 
 
    <div class="reply">reply</div> 
 
    </span> 
 
</div>

0

여기 내가 사용하는 거라고 내용은 다음과 같습니다

require 'nokogiri' 

doc = Nokogiri::HTML(<<EOT) 
<div class="comment"> 
    <span class="c00"> 
    TEXT 
    <p>text</p> 
    <p>text</p> 
    <div class="reply">reply</div> 
    </span> 
</div> 
EOT 

span = doc.at('span.c00') 
text_nodes = [ span.children.first.text.strip ] 
text_nodes += span.search('p').map(&:text) 
text_nodes # => ["TEXT", "text", "text"] 

을 때때로 컷 클리어하고 쉬운 경로가 아니지만, 문제를 간단한 단계로 세분하면 일반적으로 문제가 발생합니다.

관련 문제