1

次のような HTML コードがあります。

<div id="printready">
  <div class="box-single"></div>
  <div class="marker"></div>
    <h2>sometext</h2>
    <div id="news-single-img"></div>
    <p>...</p>
    <p>...</p>
    <p>...</p>
    <p>...</p>
    <p>...</p>
    <span class="cl"></span>
    ... (remove everything since the last paragraph)
</div>

これらのタグを削除する最良の方法は何ですか.box-single, .marker, h2,#news-single-imgその後、すべての段落を保持し、最後の段落から残りを削除したい.

Nokogiri で試してみましたが、良い解決策が見つかりませんでした。使っているフレームワークはRuby on Railsです!

4

3 に答える 3

2

やりたいことにはあいまいさがあるので、最初のパスは次のとおりです。

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<div id="printready">
  <div class="box-single"></div>
  <div class="marker"></div>
    <h2>sometext</h2>
    <div id="news-single-img"></div>
    <p>...</p>
    <p>...</p>
    <p>...</p>
    <p>...</p>
    <p>...</p>
    <span class="cl"></span>
    ... (remove everything since the last paragraph)
</div>
EOT

%w[.box-single .marker].each do |klass|
  doc.search(klass).each do |tag|
    tag['class'] = nil
  end
end

doc.at('h2').remove

%w[#news-single-img].each do |tag_id|
  doc.at(tag_id)['id'] = nil
end

loop do 
  next_tag = doc.at('span.cl').next_sibling
  break unless next_tag
  next_tag.remove
end

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><div id="printready">
  <div class=""></div>
  <div class=""></div>

    <div id=""></div>
    <p>...</p>
    <p>...</p>
    <p>...</p>
    <p>...</p>
    <p>...</p>
    <span class="cl"></span>
</div></body></html>

classパラメータとidパラメータを完全に削除する場合:

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<div id="printready">
  <div class="box-single"></div>
  <div class="marker"></div>
    <h2>sometext</h2>
    <div id="news-single-img"></div>
    <p>...</p>
    <p>...</p>
    <p>...</p>
    <p>...</p>
    <p>...</p>
    <span class="cl"></span>
    ... (remove everything since the last paragraph)
</div>
EOT

%w[.box-single .marker].each do |klass|
  doc.search(klass).remove_attr('class')
end

doc.at('h2').remove

%w[#news-single-img].each do |tag_id|
  doc.search(tag_id).remove_attr('id')
end

loop do 
  next_tag = doc.at('span.cl').next_sibling
  break unless next_tag
  next_tag.remove
end

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><div id="printready">
  <div></div>
  <div></div>

    <div></div>
    <p>...</p>
    <p>...</p>
    <p>...</p>
    <p>...</p>
    <p>...</p>
    <span class="cl"></span>
</div></body></html>
于 2013-06-13T19:09:15.170 に答える
-2

JavaScript を使用すると、次のように実行できます。

<script type="text/javascript">
    $(function () {
        $("button").click(function () {
            $(".box-single").remove();
        });
    });
</script>
于 2013-06-13T14:10:42.793 に答える