Nokogiri에서 DOM 스티커
메모인 만큼 수시로 내용 수정과 추가를 진행한다.
차리다
자주 사용하는
bundler
설치nokogiri
물건입니다.$ bundle init
에서 Gemfilegem "nokogiri"
줄 $ bundle install --path=.bundle/vendor/bundle
Nokogiri
가 설치되어 사용됩니다.다음은 초기 코드입니다.#!/usr/bin/env ruby
require 'bundler'
Bundler.setup(:default, :ci)
require 'nokogiri'
RAW_HTML = DATA.read # __END__ の次行から末尾まで読み込む
def get_document
Nokogiri::HTML(RAW_HTML, nil, 'utf-8')
end
__END__
<html>
<head>
<title>hello</title>
</head>
<body>
<p>hello</p>
<p id="foo">goto <a href="https://qiita.com">Qiita</a> site!</p>
</body>
</html>
이후문서에서 생성Nokogiri::HTML::Document
한 후에 코드의 예를 들어 보십시오.하나하나 재생성하는 것은 소개하는 방법이 거의 파괴적인 방법이기 때문이다.__END__
전에 코드 예시를 기입해 주십시오.예제
내용의 변경
doc = get_document
doc.at_css('title').content = 'new title'
puts doc.at_css('title') # => '<title>new title</title>'
# #foo の子供の最初のノード (goto ) を書き換える
doc.at_css('#foo').children[0].content = 'this is '
puts doc.at_css('#foo') # => '<p id="foo">this is <a href="https://qiita.com">Qiita</a> site!</p>'
그러나 Nokogiri::XML::Text#content=
라벨이 달린 문자열을 건네줘도 도망갈 수 있다.방법 css와atcss에 대한 차이
자주 잊어버리기 때문에 스크랩 측 얘기다.CSS 선택기가 노드(요소)를 지정하는 두 가지 방법1이 있습니다.
doc = get_document
p doc.css('p').map{|x| x.to_s} # => ["<p>hello</p>", "<p id=\"foo\">goto <a href=\"https://qiita.com\">Qiita</a> site!</p>"]
puts doc.at_css('p').to_s # => <p>hello</p>
중요한 것은Nokogiri::XML::Searchable#css
모든 관련 요소 나열Nokogiri::XML::Searchable#at_css
조건에 부합되는 첫 번째 원소그러니까
id
속성으로 꺼낼 때 문서에 하나밖에 없기 때문에 at_css
로 꺼내는 것이 좋습니다.특정 요소의 컨텐츠를 완벽하게 교체
doc = get_document
doc.at_css('#foo').children.unlink
doc.at_css('#foo') << '<span>new text</span>'
puts doc.at_css('#foo') # => '<p id="foo"><span>new text</span></p>'
여기에 라벨을 사용할 수 있습니다.참고로 Nokogiri::Node#<<
방법은 요소 내용의 끝에 부가된다.그래서 첫 줄이 없으면...의 후면〜.children.unlink
에 요소를 삽입합니다.해보면 알 것 같아서요.참고 문헌
Module: Nokogiri 주요 자료일 수 있음
Reference
이 문제에 관하여(Nokogiri에서 DOM 스티커), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/__hage/items/968d810509d9a86c3a2d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)