2012-09-10 3 views
0

CSS 또는 XPath를 사용하여 코드에서 "다음"텍스트와의 연결을 얻는 방법?CSS 또는 XPath를 사용하여 내용별로 요소 선택

<div id="pagination"> 
    <a href="link">2</a> 
    <a href="link">3</a> 
    <a href="link">4</a> 
    <a href="link">5</a> 
    <a href="link">6</a> 
    <a href="link">7</a> 
    <a href="link">8</a> 
    <a href="link">9</a> 
    <a href="link">10</a> 
    <a href="link">Next</a> 
    <a href="link">Last</a> 
</div> 
+0

당신이 jQuery를 사용할 수 없습니다 또는 CSS는 CSS를 사용하여 3 선택기 수 있습니다 나는 CSS를 사용하는 것이 불가능하다고 생각합니다. – freebird

+0

Capybara가 CSS와 XPath를 지원하기 때문에 CSS 또는 XPath 여야합니다. –

답변

2

원하는 것이 분명하지 않습니다.

require 'nokogiri' 

doc = Nokogiri::HTML(<<EOT) 
<div id="pagination"> 
    <a href="link">2</a> 
    <a href="link">3</a> 
    <a href="link">4</a> 
    <a href="link">5</a> 
    <a href="link">6</a> 
    <a href="link">7</a> 
    <a href="link">8</a> 
    <a href="link">9</a> 
    <a href="link">10</a> 
    <a href="link">Next</a> 
    <a href="link">Last</a> 
</div> 
EOT 

doc.search('a')[9] 
=> #<Nokogiri::XML::Element:0x80763880 name="a" attributes=[#<Nokogiri::XML::Attr:0x80763498 name="href" value="link">] children=[#<Nokogiri::XML::Text:0x80762fd4 "Next">]> 

또는 : 당신은 열 번째 링크를 원하는 경우

doc.at('//a[9]') 

당신은 내가 ',있을거야하지만 텍스트를 키 입력하고 CSS를 사용하고자하는 요소 번호를 모르는 경우 do :

doc.search('a').select{ |n| n.content == 'Next' }.first 

불행히도 CSS는 태그 텍스트를 검색 할 수 없으므로 약간 창의적으로 처리해야합니다. 규칙이 그 문자열 값 "Next"adiv의 마지막하지만 하나의 자식이라고하면

doc.at('//a[text()="Next"]') 
+0

태그의 위치가 바뀌기 때문에 위치를 알지 못합니다. 2, 3 번째 해법이 좋습니다. –

1
path = "/a[.='Next']" 

text()있어 당신은 '다음'과 a 요소를 얻을 것이다, 그 경로에 대한 쿼리를 수행.

+0

여기서'.'의 의미를 설명 할 수 있습니까? 왜 안 되니?/a [text() = 'Next' "" –

+0

물론 그렇게 할 수 있습니다! '.'은 내가 잘못하지 않았다면 기본적으로'현재 노드'를 의미합니다. 나는 이전에'.'을 기억하므로 지금은 무엇인지 확실하게 말할 수 없습니다. – Prasanth

0

그냥 사용 : : XPath는 그것을 할 수

여기
//div[@id='pagination']/a[last()-1] 

우리가 있다고 가정 많게는 하나의 divid 속성의 값이 "pagination" 인 XML 문서에 존재합니다. 이는 XHTML 문서의 적절한 가정입니다.

XSLT - 대조이 변환이 제공된 XML 문서에인가

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy-of select="//div[@id='pagination']/a[last()-1]"/> 
</xsl:template> 
</xsl:stylesheet> 

: XPath 식을 평가

<div id="pagination"> 
    <a href="link">2</a> 
    <a href="link">3</a> 
    <a href="link">4</a> 
    <a href="link">5</a> 
    <a href="link">6</a> 
    <a href="link">7</a> 
    <a href="link">8</a> 
    <a href="link">9</a> 
    <a href="link">10</a> 
    <a href="link">Next</a> 
    <a href="link">Last</a> 
</div> 

이 중 선택된 노드 평가는 출력에 복사됩니다.

,
<a href="link">Next</a> 
0

사실, CSS로이 작업을 수행 할 수 있습니다 : 그것은 항상 2 마지막 가정

#pagination a:nth-last-child(2) 

, 당신은

관련 문제