NoMethodError:#nokogiri :: xml :: nodeset:0x007fbefee5e420>

时间:2017-05-30 12:39:10

标签: html css ruby nokogiri

我有问题。我应该阅读一个html,其中包含一个类名为“article_img”的图像,我应该可以将其作为其父级的兄弟。我的代码可以工作,但它将我的test.html中的两个图像放在与'div'相同的级别上,而不是将其他'img'放在与'p'相同的级别上

这是我的代码:

require 'nokogiri'

doc = File.open('test.html') { |f| Nokogiri::HTML(f)}

doc.css('html').each do |element|
    img = element.css('img.article_img')
    parent = img.first.parent
    parent.before(img)
end

这是我的示例html

<div>       
    <p>Lorem ipsum jne...<a href="#">link</a></p>

    <img class="article_img" src="image.jpg">

    <p>Lorem ipsum jne...<a href="#">link</a>
        <img class="article_img" src="image.png">
    </p>        

</div>

结果应该是这样的:

<img class="article_img" src="image.jpg">

<div>       
    <p>Lorem ipsum jne...<a href="#">link</a></p>

    <img class="article_img" src="image.png">

    <p>Lorem ipsum jne...<a href="#">link</a></p>       

</div>

2 个答案:

答案 0 :(得分:1)

我想我找到了答案:

doc.css('html').each do |element|
  element.css('img.article_img').each do |node|
    node.parent.before(node)
  end
end

和更短的版本

 ResourceMethodInvoker methodInvoker = (ResourceMethodInvoker) requestContext.getProperty(“org.jboss.resteasy.core.ResourceMethodInvoker”);
    Method method = methodInvoker.getMethod();

答案 1 :(得分:1)

我是这样做的:

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<html>
  <body>
    <div>       
      <p>Lorem ipsum jne...<a href="#">link</a></p>
      <img class="article_img" src="image.jpg">
      <p>Lorem ipsum jne...<a href="#">link</a>
      <img class="article_img" src="image.png">
      </p>        
    </div>
  </body>
</html>
EOT

img = doc.at('img.article_img')
img.parent.add_previous_sibling(img)
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>
# >>     <img class="article_img" src="image.jpg"><div>       
# >>       <p>Lorem ipsum jne...<a href="#">link</a></p>
# >>       
# >>       <p>Lorem ipsum jne...<a href="#">link</a>
# >>       <img class="article_img" src="image.png">
# >>       </p>        
# >>     </div>
# >>   </body>
# >> </html>

doc.at('img.article_img')找到第一个<img class="article_img"...>

我们在HTML中留下了一个空白,因为有一个尾随的Text节点包含在“漂亮的HTML”中看到的格式。修复这是留给读者的练习。