2011-03-10 2 views
0

질문 이름에 대해 확실하지 않았습니다. nokogiri를 사용하여 얻은 HTML 페이지가 있습니다. 이제 해당 페이지에서 일부 태그를 자르고 싶습니다. 나는 html을 문자열로 변환 한 후에 루비의 delete 메소드를 사용했다. 입력 한 모든 문자는 삭제되지만. 내가 얻은 가장 좋은 결과는 여전히 약간의 공간을 남겨 두었지만 .gsub('<stuff>', '')을 사용하고 있었다. 실제로 문자열을 잘라낼 수 있습니까? 특정 pharses? 또 다른 질문 - 공백을 제거 할 수 있습니까? 지금까지 무슨 짓을루비의 문자열에서 문구를 자르는 방법은 무엇입니까?

:

doc = Nokogiri::HTML(open("http://www.example.com/")) 
tester = doc.css(".example").to_s.gsub('<div class="example">', '') 
+0

의미 구문. 죄송합니다 맞춤법 오류입니다. – Ariel

+1

몇 가지 간단한 실제 입력 및 출력 데이터를 주면 여기에서 달성하려는 내용을 설명 할 수 있습니까? – Dogbert

+0

도움이 필요하면 Dogbert가 말한 것을하십시오. 귀하의 질문은 아직 명확하지 않습니다. – Phrogz

답변

1

내가 XML 트리 수준이 아닌 문자열 편집에 그것을하려고 노력 좋을 것. nokogiri API가이 작업을 수행하는 데 필요한 도구를 제공한다고 생각합니다.

원하지 않는 부분을 삭제하는 대신 css 또는 xpath를 사용하여 원하는 데이터를 선택할 수도 있습니다.

또한 문자열의 공간을 정규화하는 XPath 기능이있다, 예를 들어 거기 in this question

일부 노코 기리 도움 :

+0

xml 트리 수준에서 어떻게 수행합니까? 나는 그것을 이해하고 정말로 싶습니다. 그리고 실제로 nokigiri의 xml api를 얻지는 않았습니다 ... – Ariel

+0

그러면 노드 세트를 되돌려줍니다. 그러면 트리처럼 탐색 할 수 있습니다. 나는 답변에 대한 튜토리얼 링크를 추가했다. API는 까다 롭지 만 IRB에서 놀기에는 시간을 보내고, Ruby에서 HTML 또는 XML 구문 분석을 다시 사용하면 (그리고 많은 다른 라이브러리에서 배후에서 사용합니다.) 매우 유용합니다. – nruth

+0

+1 XML 트리 작업. Regexs를 XML/HTML로 시작하면 많은 문제가 발생합니다.Nokogiri는 알아두면 매우 중요하며 태그를 트래버스하거나 바꿀 수있는 언어는 거의 동일합니다. –

1

Nokogiri의 튜토리얼을 확인하십시오. 특히, "Modifying an HTML/XML Document", Changing text contents을 읽고 싶습니다.

Nokogiri의 XML 접근자는 XPath를 사용할 필요가 없기 때문에 매우 친숙합니다. CSS 접근자를 사용할 수도 있고, 하루 종일 XML을 사용하지 않는 사람들을 위해 CSS도 사용할 수 있습니다.

이 예에서는 대상의 첫 번째 항목을 검색하는 at_css 메서드를 사용하고 있습니다. at, %, at_cssat_xpath "find the first one"과 같은 많은 대체 방법이 있습니다. search, css, xpath, / 마찬가지로 "모든 일치 찾기"를 처리하십시오. 예를 들어

:

, 노코 기리의 새로운 HTML 문서를 생성하는 첫번째 H1를 검색하고, 생략 부호로 대체, 그 내용에 후행 세 문자를 트림
require 'nokogiri' 

html = '<h1>Snap, Crackle and Pop</h1>' 

doc = Nokogiri::HTML(html) 
h1 = doc.at('h1') 
h1.content = h1.content[0, h1.content.length - 3] + '...' 

puts doc.to_html 

>> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
>> <html><body><h1>Snap, Crackle and ...</h1></body></html> 

.